MediaStore API — este interfața Android pentru accesul la fișierele media comune ale dispozitivului: imagini, videoclipuri, audio și documente. Spre deosebire de accesul direct la fișiere, MediaStore funcționează printr-o bază de date media centralizată și un furnizor de conținut. Conform Android Developers Documentation (2025), începând cu Android 10 API a devenit mecanismul principal de lucru cu media în locul învechitului READ_EXTERNAL_STORAGE. Dezvoltatorii folosesc MediaStore în galerii, playere muzicale, camere și manageri de fișiere.
Principalele puncte
MediaStore API — este un furnizor de conținut de sistem pe platforma Android, destinat indexării, stocării și furnizării accesului la fișierele media ale dispozitivului. API face parte din Android SDK și este disponibil începând cu API Level 1.
MediaStore funcționează printr-o bază de date media unitară care scanează automat dispozitivul și colectează metadatele tuturor fișierelor media. Baza de date este actualizată de sistem la adăugarea, modificarea sau ștergerea fișierelor, astfel încât aplicațiile primesc întotdeauna informații actualizate fără scanare manuală.
Tabelele principale MediaStore: Images (imagini), Video (videoclipuri), Audio (audio) și Files (fișiere generale). Fiecare tabel conține coloane cu metadate: nume, dată creare, dimensiune, tip MIME, coordonate GPS și alte atribute.
Înainte de Android 10, dezvoltatorii foloseau READ_EXTERNAL_STORAGE pentru accesul la toate fișierele dispozitivului. Android 10 (API 29) a introdus Scoped Storage: aplicațiile au primit acces doar la propriile fișiere și prin MediaStore. Android 11 a înăsprit politica, blocând complet calea directă către directoarele partajate.
Începând cu Android 13 (API 33), Google a înlocuit READ_EXTERNAL_STORAGE cu permisiuni granulare: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO și READ_MEDIA_AUDIO. Acest lucru permite utilizatorului să acorde acces doar la anumite tipuri de media fără a dezvălui întreaga stocare.
MediaStore este construit pe arhitectura de furnizor de conținut: fiecare aplicație îl accesează prin ContentResolver și Uri. Scanerul media de sistem — MediaScannerConnection — indexează automat toate fișierele de pe dispozitiv la pornire, conectare USB sau repornire.
Baza de date media este stocată în baza de date de sistem și conține înregistrări pentru fiecare fișier media. Coloanele diferă pentru diferite tipuri: imaginile au ORIENTATION și DATE_TAKEN, videoclipurile — DURATION, audio — ARTIST și ALBUM. Dezvoltatorii pot executa interogări asemănătoare SQL prin query cu projection și selection pentru filtrare.
val projection = arrayOf(
MediaStore.Images.Media._ID,
MediaStore.Images.Media.DISPLAY_NAME,
MediaStore.Images.Media.DATE_ADDED
)
val cursor = contentResolver.query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection,
null,
null,
MediaStore.Images.Media.DATE_ADDED + " DESC"
)
cursor?.use {
while (moveToNext()) {
val name = getString(getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME))
}
}
Fiecare fișier media este identificat printr-un Content URI de forma content://media/external/images/media/1234. URI extern (external) indică stocarea partajată, cel intern (internal) — fișierele media de sistem. Utilizarea URI în locul căilor de fișiere — avantajul cheie al MediaStore: aplicația nu necesită acces la sistemul de fișiere și funcționează printr-un furnizor de conținut securizat.
MediaStore suportă patru tipuri principale de media, fiecare cu un tabel separat și un set de metadate. Dezvoltatorii aleg tabelul potrivit în funcție de tipul de conținut cu care lucrează aplicația.
Pe lângă coloanele standard, fiecare tabel conține câmpuri de sistem: _ID, DATA (învechit), SIZE, MIME_TYPE, DATE_ADDED, DATE_MODIFIED. Din versiunea Android 10, câmpul DATA este marcat ca deprecated, iar dezvoltatorii trebuie să lucreze prin deschiderea InputStream pe baza URI.
MediaStore necesită permisiuni explicite care diferă în funcție de versiunea Android. Înainte de Android 13 se folosea permisiunea unică READ_EXTERNAL_STORAGE. Începând cu Android 13 (API 33), Google a introdus permisiuni granulare pentru fiecare tip de media.
| Tip media | Permisiune (API 33+) | Veche (API 29-32) |
|---|---|---|
| Imagini | READ_MEDIA_IMAGES | READ_EXTERNAL_STORAGE |
| Video | READ_MEDIA_VIDEO | READ_EXTERNAL_STORAGE |
| Audio | READ_MEDIA_AUDIO | READ_EXTERNAL_STORAGE |
| Scriere | WRITE_EXTERNAL_STORAGE | WRITE_EXTERNAL_STORAGE |
Scrierea în MediaStore necesită de asemenea WRITE_EXTERNAL_STORAGE pentru Android 9 și mai jos. Începând cu Android 10, aplicația poate scrie propriile fișiere în MediaStore fără permisiuni suplimentare — sistemul acordă automat acces la inserarea înregistrării prin ContentResolver.insert.
Permisiunile MediaStore se solicită prin mecanismul standard ActivityResultContracts.RequestMultiplePermissions. Utilizatorul poate respinge solicitarea, iar aplicația trebuie să gestioneze corect acest scenariu. Se recomandă verificarea existenței permisiunii prin ContextCompat.checkSelfPermission înainte de fiecare acces la MediaStore.
MediaStore permite nu doar citirea, ci și scrierea fișierelor media. Pentru scrierea unei imagini sau a unui videoclip, dezvoltatorul folosește ContentResolver.insert și deschide OutputStream pe URI-ul returnat. Sistemul adaugă automat fișierul în baza de date media și îl indexează.
val values = ContentValues().apply {
put(MediaStore.Images.Media.DISPLAY_NAME, "photo_2025.jpg")
put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
put(MediaStore.Images.Media.RELATIVE_PATH, "Pictures/MyApp")
}
val uri = contentResolver?.insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values
)
uri?.let {
val outputStream = contentResolver?.openOutputStream(it)
outputStream?.use { stream ->
// scrieți octeți în flux
}
}
Ștergerea se efectuează prin ContentResolver.delete cu specificarea URI-ului fișierului. Sistemul verifică drepturile de acces: dacă fișierul aparține aplicației curente, ștergerea are loc fără permisiuni suplimentare. Pentru fișierele altor aplicații pe Android 10+ este necesară confirmarea utilizatorului printr-un dialog de sistem.
MediaStore API diferă fundamental de accesul direct la fișiere prin File API. În locul căilor de fișiere se folosesc Content URI, iar în locul operațiilor cu fișiere — metodele ContentResolver. Acest lucru oferă trei avantaje cheie: securitate, indexare automată și interfață unitară.
Accesul direct la fișiere este limitat pe Android 10+ pentru directoarele partajate. MediaStore rămâne singura modalitate de citire a media din Pictures, DCIM, Movies, Music și Download. Pentru fișierele proprii ale aplicației (app-specific storage) accesul direct rămâne — acestea sunt folderele din Android/data și Android/media.
Alegerea între MediaStore și accesul direct depinde de tipul de conținut. MediaStore este obligatoriu pentru fișierele media comune accesibile altor aplicații. File API direct este potrivit pentru fișierele interne ale aplicației și cache. Storage Access Framework este utilizat pentru selectarea documentelor arbitrare prin selectorul de sistem.
Întrebări frecvente
MediaStore API — este furnizorul de conținut de sistem Android pentru accesul la fișierele media ale dispozitivului: imagini, videoclipuri, audio și documente. API oferă o interfață unitară prin ContentResolver și baza de date media care indexează automat toate fișierele.
MediaStore suportă Images (imagini), Video (videoclipuri), Audio (audio) și Files (documente). Fiecare tip are un tabel separat cu propriul set de metadate: imaginile au ORIENTATION, videoclipurile — DURATION, audio — ARTIST.
Pe Android 13+ se folosesc permisiuni granulare: READ_MEDIA_IMAGES pentru imagini, READ_MEDIA_VIDEO pentru video și READ_MEDIA_AUDIO pentru audio. Utilizatorul poate acorda acces doar la anumite tipuri de media.
Pentru a scrie, creați un ContentValues cu numele și tipul MIME, apelați ContentResolver.insert pentru a obține URI, apoi deschideți OutputStream prin ContentResolver.openOutputStream. Sistemul indexează automat noul fișier.
MediaStore oferă acces programatic la toate fișierele media ale dispozitivului prin baza de date media. Storage Access Framework deschide un dialog de sistem pentru selectarea fișierului și returnează URI — utilizatorul alege un fișier sau un folder specific.
Concluzii
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și