일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- Android13
- compose
- LinearLayout
- Backup Manager
- 안드로이드
- TabLayout
- ToyProject
- constraintlayout
- retrofit
- MVI
- GPT
- SharedPreference
- github
- Coroutine
- mvvm
- CoroutineScope
- sdk33
- repositories
- php
- Emulator fails to Launch
- Swiftshader
- ViewModel
- 피그마
- ViewPager2
- Mocky
- AndroidStudio
- systembar
- statusbar
- Kotlin
- Android
Archives
- Today
- Total
Kwaang Tech
[Android] Android 13(SDK 33) 이미지 권한 부여 본문
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)
}
반응형
'Dev > Study' 카테고리의 다른 글
[Design]Figma Config 2025 컨퍼런스 (0) | 2025.05.12 |
---|---|
[API]Mocky 로 가상 API 만들기 (0) | 2024.02.07 |
[Android] CoroutineScope와 launch 함수 (1) | 2023.11.23 |
[Android] Kotlin으로 안드로이드 스레드(Thread)사용하기 (0) | 2023.10.30 |
ViewModel에서 View의 특정타입(Button,ListView 등)을 직접적으로 참조를 하지 않는 이유 (0) | 2023.09.19 |