새로운 ActivityResult API 탐색(1) - 런타임 퍼미션

박중길·2020년 11월 16일
0

Introduction

AndroidX의 Acitiviy 1.2.0-alpha02Fragment 1.3.0-alpha02에서 가 Activity Result API가 도입되었습니다. 그리고 기존에 제공하던 requestPermission()과 onRequestPermissionResult()가 공식적으로 deprecated 되었습니다. 하지만, 아직 베타 개발 단계이므로 Production 프로젝트에 적용하기는 고민을 해봐야겠습니다.

Prerequisite

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"

Let’s Start Coding

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)
}

Reference

  1. 안드로이드 개발자 문서
  2. Pluu님 블로그
  3. Medium 블로그
profile
Android Developer@cleaninglab

0개의 댓글