Androidμ Scoped Storageλ
π μ±μ΄ νμΌ μμ€ν
μ μ κ·Όν μ μλ λ²μλ₯Ό κ°νκ² μ ννλ μ μ₯μ 보μ λͺ¨λΈ
βλ΄ μ± νμΌμ λ§μλλ‘, λ¨μ νμΌμ μ νμ μΌλ‘λ§ μ κ·Όβ
1οΈβ£ μ Scoped Storageκ° μκ²ΌμκΉ?
μμ (Android 9 μ΄ν)μλ:
READ_EXTERNAL_STORAGE
WRITE_EXTERNAL_STORAGE
κΆνλ§ μμΌλ©΄
π Download / DCIM / Documents / λ€λ₯Έ μ± νμΌκΉμ§ μ λΆ μ κ·Ό κ°λ₯
β‘οΈ λ¬Έμ μ :
κ°μΈμ 보 μΉ¨ν΄
μ μ± μ±μ΄ λ€λ₯Έ μ± λ°μ΄ν° λ§μλλ‘ μ½κΈ°/μμ
μ¬μ©μ μ μ₯μμ βμ΄ μ±μ΄ μ λ΄ λͺ¨λ νμΌμ 보μ§?β λΆμν¨
κ·Έλμ Android 10(API 29) λΆν°
π Scoped Storage λμ
MediaStoreλ Androidκ° κ΄λ¦¬νλ
βκΈ°κΈ° μ μ₯μμ μλ κ³΅μ© νμΌλ€μ λ©νλ°μ΄ν° DBβλ€.
νμΌμ μ§μ νμ(File API) νλ κ² μλλΌ μμ€ν DBλ₯Ό μ‘°νν΄μ νμΌμ μ°Ύκ³ μ κ·Όνλ€.
MediaStoreλ μ¬μ€μ SQLite DBλ€.
βββββββββββ MediaStore DB βββββββββββ
β _id | display_name | size | mime β
ββββββββββββββββββββββββββββββββββββ
μ±μ μ΄ DBλ₯Ό ContentResolverλ‘ μ‘°ννλ€.
context.contentResolver.query(
uri,
projection,
selection,
selectionArgs,
sortOrder
)
3οΈβ£ MediaStoreκ° λ€λ£¨λ βλμβ
| 컬λ μ
| λμ |
| -------------------- | ---------------- |
| MediaStore.Images | μ¬μ§ |
| MediaStore.Video | μμ |
| MediaStore.Audio | μμ
|
| MediaStore.Files | λͺ¨λ νμΌ(λ¬Έμ ν¬ν¨) |
| MediaStore.Downloads | λ€μ΄λ‘λ νμΌ |
SAF (Storage Access Framework)λ?
SAFλ Androidμμ
μ¬μ©μκ° λͺ
μμ μΌλ‘ μ νν νμΌ/ν΄λμ λν΄μλ§
μ±μ΄ μ κ·Όν μ μκ² νλ 곡μ νμΌ μ κ·Ό νλ μμν¬μΌ.