Dev/Study
[Android] Android 13(SDK 33) 이미지 권한 부여
콰앙
2024. 12. 9. 20:54
TatgetSdk = 34인 상태에서 갤러리에서 가져온 이미지를 사용 하려고 하니 권한이 거부 되는 현상이 발생했다.
Target SDK를 33 이상으로 변경하게 된다면 기존 READ_EXTERNAL_STORAGE 권한에 대한 세분화가 진행 된다.
기존에 READ_EXTERNAL_STORAGE 권한만 적용되어 있다면, TargetSDK 33부터는 필요에 따라
READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO 에 대한 권한들을 Manifest에 선언해 주고 해당 이름의 권한으로 권한 요청을 진행해야 한다.
AndroidManifest.xml
Android 13 이상 에서 사용할 READ_MEDIA_IMAGES 과 미만에서 사용할 READ_EXTERNAL_STORAGE 권한을 선언해준다.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
MainActivity.kt
private val requestPermission: ActivityResultLauncher<Array<String>> =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
permissions.entries.forEach {
val perMissionName = it.key
val isGranted = it.value
//권환 부여시 Toast 표시 후 실행
if (isGranted) {
Toast.makeText(
this@MainActivity,
"권한 부여",
Toast.LENGTH_LONG
).show()
val pickIntent =
Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
openGalleryLauncher.launch(pickIntent)
} else {
if (perMissionName == Manifest.permission.READ_EXTERNAL_STORAGE)
Toast.makeText(
this@MainActivity,
"권한 거부",
Toast.LENGTH_LONG
).show()
}
}
}
private fun requestStoragePermission() {
val permissions = when {
Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU -> {
// Android 33 이상
arrayOf(Manifest.permission.READ_MEDIA_IMAGES)
}
Build.VERSION.SDK_INT >= Build.VERSION_CODES.M -> {
// Android 23 ~ Android 32
arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE)
}
else -> {
// Android 22 이하 (권한 요청 필요 없음)
return
}
}
requestPermission.launch(permissions)
}
반응형