일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 피그마
- Swiftshader
- php
- github
- GPT
- Emulator fails to Launch
- Android13
- mvvm
- Backup Manager
- Mocky
- retrofit
- systembar
- sdk33
- compose
- Coroutine
- TabLayout
- CoroutineScope
- ViewModel
- SharedPreference
- statusbar
- 안드로이드
- repositories
- Android
- ViewPager2
- MVI
- AndroidStudio
- constraintlayout
- LinearLayout
- Kotlin
- ToyProject
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' 카테고리의 다른 글
[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 |
MVC, MVP, MVVM, MVI (7) | 2023.09.14 |