Android (안드로이드)
Android in A..Z - ActivityResultContract
강태종
2021. 5. 23. 08:20
Activity 사이에서 결과를 받을 수 있는 startActivityResult, onActivityResult 등이 deprecated되면서 새로운 API인 ActivityResultContract가 생겼다.
사용법
registerForActivityResult를 통해 ActivityResultContract를 등록하고 callback 함수를 재정의한다.
=> 활성상태 (onResume가 호출되어 Activity가 보이는 상태)에서 등록할 시 Exception이 발생한다. onCreate로 선언하거나 변수로 선언하자.
private val activityResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
Log.d("PASS", it.toString())
if (it.resultCode == Activity.RESULT_OK) {
Toast.makeText(this, it.data!!.getStringExtra("data"), Toast.LENGTH_SHORT).show()
}
}
private val permissionRequest = registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) {
it.entries.forEach { entry ->
Log.d("PASS", "${entry.key} : ${entry.value}")
}
}
activityResult.launch(Intent(this, InputActivity::class.java))
permissionRequest.launch(
arrayOf(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA,
)
)
ActivityResultLauncher의 launch로 실행한다. (각 ActivityResultLauncher마다 요구하는 매개변수가 다름)
Fragment에서도 사용법은 동일하다.
Git (예제코드)
https://github.com/KangTaeJong98/Example/tree/main/Android/ActivityResultContract
KangTaeJong98/Example
My Example Code. Contribute to KangTaeJong98/Example development by creating an account on GitHub.
github.com