본문 바로가기
Android.Kotlin

[Android] JetPack Compose 에서 permission 요청하기

by 동동하다 2023. 9. 5.
반응형

최근의 Android 개발은 대부분 JetPack Compose 에서 이루어지고 있습니다.

그래서 최대한 JetPack Compose 100%로 사이드 프로젝트를 해보고 있는데, 아무 생각없이 기존의 Permission 요청을 기존의 방식으로 작성했다가 빨간줄이 발생해서 적지않게 놀랐습니다.

간단하게 JetPack Compose 로 Permission 요청하는 방법에 대해 기록하고자 합니다.

설치

JetPack Compose 에서 Permission 요청을 하기 위해서는 Google 레포의 accompanist 의 accompanist-permissions 모듈을 설치 해야 합니다.

build.gradle.kt 파일에 아래 dependency 를 추가 후 sync 해주세요.

implementation ("com.google.accompanist:accompanist-permissions:<<version>>")

<<> 부분에는 원하는 버전 정보를 입력하면 됩니다.

권한 요청

permission 에 대한 dependency 가 추가되면 rememberPermissionState 함수를 사용할 수 있습니다.

(multi permission 요청을 위해서는 rememberMultiPermissionState 를 이용)

@OptIn(ExperimentalPermissionsApi::class)
@Composable
private fun requestPermission() {
    val cameraPermissionState = rememberPermissionState(
        android.Manifest.permission.CAMERA
    )

    if (cameraPermissionState.status.isGranted) {
        Text("카메라 권한 획득")
    } else {
        Column {
            val textToShow = if (cameraPermissionState.status.shouldShowRationale) {
                "카메라 권한은 필수 입니다. 카메라 권한을 획득해 주세요"
            } else {
                "카메라 권한이 필요 합니다."
            }
            Text(textToShow)
            Button(onClick = { cameraPermissionState.launchPermissionRequest() }) {
                Text("권한 요청")
            }
        }
    }
}

cameraPermissionState.status.shouldShowRationale 함수는 유저가 권한 요청을 거절 했을 때 호출 됩니다.

 

주의할 점은,

Permission API 는 아직 실험적인 상태이기 때문에 언제든지 변경될 가능성이 존재합니다. 따라서 모든 API는 @ExperimentalPermissionsApi 어노테이션으로 표시되어 있습니다.

 

또한, 사용자에게 권한을 요청하는 PermissionState.launchPermissionRequest() 와 같은 메서드의 호출은 @Composable 이 아닌 범위에서 호출해야 합니다. 그래서 위에서 Button 의 onClick 에서 호출 해 주었습니다.

 

더 많은 예제는 아래 링크를 참고

반응형