Jetpack Compose 권한 체크 및 권한 허용
Search
💶

Jetpack Compose 권한 체크 및 권한 허용

생성일
2022/04/26 10:14
태그
여러개의 권한을 추가 하려 한다. jetpack compose 에서는 권한에 대한걸 다루는게 어색할 수 있지만, 다음 내용을 잘 따라하면 문제 없다.

프로세스

1.
권한을 허용 하거나 거부 했는지 확인한다.
2.
1번을 한 번도 수행하지 않았을 경우, 필요한 권한에 대한 안내 팝업을 표시하고 확인 버튼을 눌렀을 때 사용자에게 권한을 받아온다.

implementation 추가

implementation 'com.google.accompanist:accompanist-permissions:0.24.7-alpha'
Kotlin

필요한 권한 정의

Manifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.RECEIVE_SMS" />
XML

permissionList

val MY_PERMISSION_LIST = listOf( Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.RECEIVE_SMS )
Kotlin

사용 모습(Top-down)

HomeScreen

@Composable fun HomeScreen(viewModel: HomeViewModel = hiltViewModel()) { CheckPermission() }
Kotlin
HomeScreen에 CheckPermission이란 함수를 만들어 권한 체크와 권한 허용에 대한 로직을 수행할 예정이다.

CheckPermission()

@Composable fun CheckPermission() { val permission = getPermissionState() logC("permission.allPermissionsGranted ${permission.allPermissionsGranted}") if(permission.allPermissionsGranted.not() && prefs.getSharedPrefBool(PrefKey.PREF_KEY_APP_PERMISSION_CHECK).not()){ PermissionDialog(onDismissRequest = { logC("PermissionDialog onDismissRequest") permission.launchMultiplePermissionRequest() }) } }
Kotlin
permission이 전부 false로 되어 있고, sharedPreference에 권한에 대한 허용이나 거부를 처리 했다는 값이 없다면 PermissionDialog 팝업을 표시한다. 이 팝업에서 “확인” 버튼을 눌렀을 경우, “permission.launchMultiplePermissionRequest()”를 통해 사용자에게 권한을 받아 온다.

getPermissionState()

@Composable fun getPermissionState(): MultiplePermissionsState { val multiplePermissionsState = rememberMultiplePermissionsState(permissions = MY_PERMISSION_LIST) { logC("rememberMultiplePermissionsState } return multiplePermissionsState }
Kotlin
저 위에서 필요한 권한을 모아 놨던 List(MY_PERMISSION_LIST)를 이용해 가져오자.
여기 까지 성공 했다면, 앞으로 Jetpack Compose에서 권한 처리 하는데 어려움은 없을 것이다.