AndroidX의 Acitiviy 1.2.0-alpha02와 Fragment 1.3.0-alpha02에서 가 Activity Result API가 도입되었습니다. 그리고 기존에 제공하던 requestPermission()과 onRequestPermissionResult()가 공식적으로 deprecated 되었습니다. 하지만, 아직 베타 개발 단계이므로 Production 프로젝트에 적용하기는 고민을 해봐야겠습니다.
build.gradle에 아래 dependency를 추가합니다.
def activityVersion = "1.2.0-beta01"
implementation "androidx.activity:activity-ktx:$activityVersion"
def fragmentVersion = "1.3.0-beta01"
implementation "androidx.fragment:fragment-ktx:$fragmentVersion"
Activity와 Fragment에서 아래 동일한 코드로 런타임 권한을 요청할 수 있습니다.
// 사용자의 응답을 처리하는 권한 콜백을 등록
private val requestPermissionLauncher = registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { isGranted ->
if (isGranted) {
// 권한 획득 성공 시
} else {
// 권한 획득 거부 시
}
}
// 권한 호출 함수
private fun requestPermission() {
requestPermissionLauncher.lauch(Manifest.permission.RECORD_AUDIO) // 음성 녹음 권한 요청
}
private val permissions = arrayOf(
Manifest.permission.RECORD_AUDIO,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
private val askMultiplePermissionsLauncher =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { map ->
for (entry in map.entries) {
Toast.makeText(
context,
"${entry.key} = ${entry.value}",
Toast.LENGTH_SHORT
).show()
}
}
private fun requestPermissions() {
askMultiplePermissionsLauncher.lauch(permissions)
}