개발일지

Android in A..Z - ActivityResultContract 본문

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

 

'Android (안드로이드)' 카테고리의 다른 글

Android in A..Z - Constraint Layout  (0) 2021.08.04
Android in A..Z - OnTouchListener, GestureEvent  (0) 2021.07.18
Android in A..Z - DataStore  (0) 2021.03.30
Android in A..Z - Dialog  (0) 2021.03.22
Android in A..Z - QR Code  (0) 2021.03.16
Comments