최근의 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 에서 호출 해 주었습니다.
더 많은 예제는 아래 링크를 참고
'Android.Kotlin' 카테고리의 다른 글
[Kotlin] 범위 지정 함수(scope function) 란? apply, run, let, with, also (0) | 2023.09.19 |
---|---|
[Android] Android Studio 이전 버전 다운로드 (0) | 2023.09.13 |
[Android] Coroutine Builder, Suspend 함수 이해하기 (0) | 2023.09.11 |
[Android] Kotlin CoroutineScope 에 대해 알아보자 (0) | 2023.09.08 |
[Android] JetPack Compose 에서 상태 관리 (remember, rememberSaveable) (0) | 2023.09.05 |