갤러리에 있는 사진에 접근하기 위해 권한을 체크하고 요청하려고 한다. 컴포즈에서 권한은 어떻게 체크하고 요청할까?

AndroidManifest.xml 에 요청할 권한을 추가해준다.
SDK version 33부터는 READ_MEDIA_IMAGES 으로 써줘야 한다.
단말이 버전 34인데, READ_EXTERNAL_STORAGE 권한으로 요청하니까 권한 요청 팝업이 뜨지 않았다.
(참고) Android API Levels 확인 > https://apilevels.com
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
fun checkPermission(
context: Context,
launcher: ManagedActivityResultLauncher<Array<String>, Map<String, Boolean>>,
result: (Boolean) -> Unit
) {
val permissions = if (Build.VERSION.SDK_INT >= 33) {
arrayOf( Manifest.permission.READ_MEDIA_IMAGES)
} else {
arrayOf( Manifest.permission.READ_EXTERNAL_STORAGE)
}
if (permissions.all {
ContextCompat.checkSelfPermission(
context,
it
) == PackageManager.PERMISSION_GRANTED
}) {
result(true)
}
else {
result(false)
launcher.launch(permissions)
}
}
// check permission
val context = LocalContext.current
val launcherMultiplePermissions = rememberLauncherForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { permissionsMap ->
val areGranted = permissionsMap.values.reduce { acc, next -> acc && next }
if (areGranted) {
galleryLauncher.launch(
PickVisualMediaRequest(
ActivityResultContracts.PickVisualMedia.ImageOnly
)
)
} else {
scope.launch {
snackbarHostState.showSnackbar(message = context.getString(R.string.msg_permission_photo))
}
}
}