안드로이드 앱을 개발하다보면 다른 Activity나 Intent를 시작하고 그 결과를 처리해야 하는 경우가 많이 있습니다.
이때 registerForActivityResult를 사용하면 간결한 코드로 결과 처리를 할 수 있습니다.
이 글에서 registerForActivityResult를 사용하여 다른 Activity의 결과를 처리하는 방법을 설명합니다.
기존에(Android 10 이하) 아래와 같이 startActivityForResult 기능을 이용할 수 있었는데요.
// Launch the activity
val intent = Intent(this, MyActivity::class.java)
startActivityForResult(intent, REQUEST_CODE)
// Handle the result
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
// Handle the result here
}
}
}
startActivityForResult는 Android 10 (API 레벨 29) 이하에서 주로 사용되었던 방법입니다.
Android 11 (API 레벨 30) 이상에서는 이 방법이 Deprecated 되었습니다..
1. ActivityResultLauncher 설정
ActivityResultLauncher를 설정하여 결과를 처리할 준비를 합니다.
ActivityResultLauncher는 registerForActivityResult를 통해 초기화됩니다.
예를 들어, 이미지를 선택하는 경우를 생각해보겠습니다.
val imagePickerLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
val data: Intent? = result.data
// 이미지를 처리하는 코드를 여기에 추가
}
}
위 코드에서 ActivityResultContracts.StartActivityForResult는 새로운 Activity를 시작하고 해당 결과를 받기 위한 컨트랙트를 나타냅니다.
2. 다른 Activity 시작
이제 다른 Activity를 시작하려면 ActivityResultLauncher를 사용합니다.
예를 들어, 이미지를 선택하는 다른 Activity를 시작하는 경우:
val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
imagePickerLauncher.launch(intent)
/*
val intent = Intent(this, MyActivity::class.java)
imagePickerLauncher.launch(intent)
*/
위의 코드에서 imagePickerLauncher를 사용하여 이미지 선택을 위한 다른 Activity를 시작합니다.
3. 결과 처리
다른 Activity에서 결과가 반환되면 ActivityResultLauncher의 결과 콜백에서 결과를 처리할 수 있습니다.
위의 코드에서는 이미지를 선택한 후 해당 이미지를 처리할 수 있습니다.
4. 기타
위 설명에 추가적으로 Media와 관련된 기능을 제대로 사용하기 위해서는 READ_EXTERNAL_STORAGE과 같은 필요한 권한 및 설정을 추가해야 합니다.
'Android > Features' 카테고리의 다른 글
[Android] BroadcastReceiver 사용하기 (0) | 2023.11.22 |
---|---|
[Android] 백그라운드 스레드에서 메인 스레드로 데이타 전달하는 방법 (0) | 2023.11.22 |
[Android] 스레드(Thread)와 핸들러(Handler) (1) | 2023.11.22 |
[Android] android java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 에러 원인 및 해결 방법 (0) | 2023.11.13 |
[Android] StartIntentSenderForResult 를 사용하여 외부 앱과 상호작용하기 (0) | 2023.10.14 |