Android Storage

μœ μ‹œν˜„Β·2026λ…„ 1μ›” 1일

Android

λͺ©λ‘ 보기
47/55

Scoped Storage

Android의 Scoped StorageλŠ”
πŸ‘‰ 앱이 파일 μ‹œμŠ€ν…œμ— μ ‘κ·Όν•  수 μžˆλŠ” λ²”μœ„λ₯Ό κ°•ν•˜κ²Œ μ œν•œν•˜λŠ” μ €μž₯μ†Œ λ³΄μ•ˆ λͺ¨λΈ
β€œλ‚΄ μ•± νŒŒμΌμ€ λ§ˆμŒλŒ€λ‘œ, λ‚¨μ˜ νŒŒμΌμ€ μ œν•œμ μœΌλ‘œλ§Œ 접근”

1️⃣ μ™œ Scoped Storageκ°€ μƒκ²Όμ„κΉŒ?

μ˜ˆμ „(Android 9 μ΄ν•˜)μ—λŠ”:

READ_EXTERNAL_STORAGE

WRITE_EXTERNAL_STORAGE

κΆŒν•œλ§Œ 있으면
πŸ“‚ Download / DCIM / Documents / λ‹€λ₯Έ μ•± νŒŒμΌκΉŒμ§€ μ „λΆ€ μ ‘κ·Ό κ°€λŠ₯

➑️ 문제점:

κ°œμΈμ •λ³΄ μΉ¨ν•΄

μ•…μ„± 앱이 λ‹€λ₯Έ μ•± 데이터 λ§ˆμŒλŒ€λ‘œ 읽기/μ‚­μ œ

μ‚¬μš©μž μž…μž₯μ—μ„œ β€œμ΄ 앱이 μ™œ λ‚΄ λͺ¨λ“  νŒŒμΌμ„ 보지?” λΆˆμ•ˆν•¨

κ·Έλž˜μ„œ Android 10(API 29) λΆ€ν„°
πŸ“Œ Scoped Storage λ„μž…

1. MediaStore

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 | λ‹€μš΄λ‘œλ“œ 파일 |

2.SAF

SAF (Storage Access Framework)λž€?

SAFλŠ” Androidμ—μ„œ
μ‚¬μš©μžκ°€ λͺ…μ‹œμ μœΌλ‘œ μ„ νƒν•œ 파일/폴더에 λŒ€ν•΄μ„œλ§Œ
앱이 μ ‘κ·Όν•  수 있게 ν•˜λŠ” 곡식 파일 μ ‘κ·Ό ν”„λ ˆμž„μ›Œν¬μ•Ό.

profile
μ•ˆλ“œλ‘œμ΄λ“œ ,ios κ³΅λΆ€ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€

0개의 λŒ“κΈ€