Hyeyeon blog

[Android] onActivityResult를 대체하는 ActivityResult API 본문

개발/Android

[Android] onActivityResult를 대체하는 ActivityResult API

Hyeyeon.P 2020. 12. 7. 14:56
반응형

 

 새로운 액티비티를 띄울 때와 퍼미션을 요청할 때 사용되었던 startActivity, requestPermission을
간결하게 대체할 수 있는 ActivityResult API 입니다.

 기존에는 onActivityResult에서 requestCode에 따라 케이스를 나누어 결과 값을 처리했다면 

이제는 각 케이스 별로 콜백을 나누어 받아 처리하여 더욱 명시적인 코드를 작성할 수 있습니다.  

 

dependency 추가

   - 최신 버전은 [링크]에서 확인하실 수 있습니다.

implementation 'androidx.activity:activity-ktx:1.2.0-alpha05'

 

startActivityForResult 대체

  1. 기존 방식 (startActivityForResult 사용) 

val intent = Intent(this, TestActivity::class.java)
startActivityForResult(intent, 10001)

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if(requestCode == 10001){
        ...
    }
}

  2. ActivityResult API 사용

val activityLauncher: ActivityResultLauncher = 
	registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { 
		activityResult: ActivityResult -> 
        	// activityResult 처리 
	}
activityLauncher.launch(Intent(this, TargetActivity::class.java))

 

requestPermission 대체

  1. 기존 방식 (requestPermission 사용) 

val permission = android.Manifest.permission.CAMERA
requestPermissions(arrayOf(permission), 10001)

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    if(requestCode == 10001){
        ...
    }
}

  2. ActivityResult API 사용

val permissionLauncher: ActivityResultLauncher = 
	registerForActivityResult(ActivityResultContracts.RequestPermission()) { 
		isGranted: Boolean -> 
        	// 퍼미션 허용 여부 값 처리 
	}
val permission = android.Manifest.permission.CAMERA
permissionLauncher.launch(permission)

 

 

관련 글

>> [Android] 갤러리에서 사진 가져오기 - ActivityResultLauncher, Intent

728x90
Comments