반응형
CAMERA Permission
앱에서 카메라 권한을 획득해야 하는 경우가 종종 발생합니다. 예전에는 앱이 시작되는 시점에 모든 권한을 획득하고 시작을 했지만, 요즘은 실제 행위가 발생하는 시점에 권한 획득을 하도록 유도하고 있습니다.
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
항상 그렇지만, manifest 파일에는 위와 같은 권한을 선언해 둡니다. 그래야 다음 동작을 구현할 때 오류가 발생하지 않습니다. 다음은 gradle 파일에 권한 획득을 위한 라이브러리를 가져올 수 있도록 구현합니다.
dependencies {
.....
// 권한 획득
implementation "com.google.accompanist:accompanist-permissions:0.27.0"
.....
}
이제 구현된 코드를 보도록 하겠습니다.
@OptIn(ExperimentalPermissionsApi::class)
@Composable
private fun FeatureThatRequiresCameraPermission(
doResult:(ty:Boolean) -> Unit
) {
// Camera permission state
val cameraPermissionState = rememberPermissionState(
Manifest.permission.CAMERA
)
when (cameraPermissionState.status) {
// If the camera permission is granted, then show screen with the feature enabled
PermissionStatus.Granted -> {
doResult(true)
}
is PermissionStatus.Denied -> {
Column(
modifier = Modifier.padding(3.dp),
horizontalAlignment = Alignment.End
) {
val textToShow = if ((cameraPermissionState.status as PermissionStatus.Denied).shouldShowRationale) {
// If the user has denied the permission but the rationale can be shown,
// then gently explain why the app requires this permission
stringResource(id = R.string.msgGetPermissonCamera)
} else {
// If it's the first time the user lands on this feature, or the user
// doesn't want to be asked again for this permission, explain that the
// permission is required
stringResource(id = R.string.msgGetPermissonCamera)
}
IconButton(onClick = {
cameraPermissionState.launchPermissionRequest()
doResult(false)
}) {
Icon(
imageVector = Icons.Outlined.PermCameraMic,
contentDescription = "Grant a Camera",
tint = softBlue
)
}
Text(textToShow)
}
}
}
}
doResult() 함수의 경우는 다른 화면 구성에서 호출 했을 때 권한 획득 여부를 return을 해 주면 해당 위치에서 다른 기능을 구현할 수 있게 됩니다. 그것을 이용하기 위해서 처리한 부분입니다.
이제 구현된 화면이 구동 모습을 보도록 하겠습니다.
이렇게 하면 앱이 구동중에 권한이 필요한 경우 메시지를 보여 주고 해당 권한을 획득한 후 필요한 동작을 구현해 볼 수 있습니다.
이 포스팅은 아래 링크의 내용을 참조 하였음을 밝혀 둡니다.
https://google.github.io/accompanist/permissions/
반응형
'모바일 앱(안드로이드)' 카테고리의 다른 글
안드로이드 앱 만들기 : Admob 버전 별 구글 광고 중단 일정. (0) | 2022.11.05 |
---|---|
개발일기 #10 진행율 표시는 어떻게 progressbar 만들기 (2) | 2022.11.03 |
개발일기 #8 : 나의 앱에도 지문인증을 넣어보자. (0) | 2022.11.01 |
개발일기#7 crashlytics:18.3.0 에 오류? (0) | 2022.10.31 |
개발일기 #? 쉬어가는 페이지... Figma 와 Android Studio 의 UI 연동 이란... (0) | 2022.10.27 |