MediaStore API: ce este, capacități și lucrul cu fișiere media comune

Autor: IT Sectr Publicat: 2026-07-10 Timp de citire: 7 min

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 — furnizorul de conținut de sistem Android pentru accesul la fișierele media comune ale dispozitivului.
  • Baza de date media indexează centralizat toate imaginile, videoclipurile și audio de pe dispozitiv.
  • Android 10 a făcut din MediaStore singura modalitate de acces la fișierele media comune.
  • Linkurile Uri înlocuiesc căile directe ale fișierelor, asigurând acces securizat.
  • Permisiunile se solicită pe tipuri de media: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO.

Ce este MediaStore API?

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.

Evoluția MediaStore în versiunile Android

Î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.

Cum funcționează MediaStore: arhitectură și bază de date media

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.

kotlin
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))
    }
}

Content URI și semnificația lor

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.

Tipuri de fișiere media în MediaStore

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.

  • MediaStore.Images — fotografii, capturi de ecran și desene. Coloane: BUCKET_DISPLAY_NAME, IS_PRIVATE, LATITUDE, LONGITUDE.
  • MediaStore.Video — înregistrări video și filme. Coloane: DURATION, RESOLUTION, IS_DRM.
  • MediaStore.Audio — piese muzicale și fișiere audio. Coloane: ARTIST, ALBUM, COMPOSER, TRACK.
  • MediaStore.Files — documente și alte fișiere. Disponibil din Android 10 pentru acces general.

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.

Permisiuni pentru lucrul cu MediaStore

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 mediaPermisiune (API 33+)Veche (API 29-32)
ImaginiREAD_MEDIA_IMAGESREAD_EXTERNAL_STORAGE
VideoREAD_MEDIA_VIDEOREAD_EXTERNAL_STORAGE
AudioREAD_MEDIA_AUDIOREAD_EXTERNAL_STORAGE
ScriereWRITE_EXTERNAL_STORAGEWRITE_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.

Solicitarea permisiunilor la runtime

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.

Exemple de cod: citire și scriere prin 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ă.

kotlin
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 fișierelor media prin MediaStore

Ș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 vs accesul direct la fișiere

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

Ce este MediaStore API în Android?

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.

Ce tipuri de media suportă MediaStore?

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.

Ce permisiuni sunt necesare pentru MediaStore pe Android 13?

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.

Cum se scrie un fișier prin MediaStore?

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.

Cu ce se deosebește MediaStore de Storage Access Framework?

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

  • MediaStore API — mecanismul principal de acces la fișierele media Android, care funcționează printr-un furnizor de conținut și o bază de date media.
  • Baza de date media indexează automat imaginile, videoclipurile, audio și documentele, oferind acces la metadate prin ContentResolver.
  • Android 10 a făcut din MediaStore singura modalitate de acces la fișierele media comune, limitând accesul direct la fișiere.
  • Android 13 a introdus permisiunile granulare READ_MEDIA_IMAGES, READ_MEDIA_VIDEO și READ_MEDIA_AUDIO în locul unui singur READ_EXTERNAL_STORAGE.
  • Content URI înlocuiesc căile de fișiere, asigurând acces securizat fără drepturi root la fișierele altor aplicații.
  • Scrierea prin MediaStore se realizează prin ContentResolver.insert și openOutputStream cu indexare automată în baza de date media.
  • Alegerea între MediaStore și SAF depinde de sarcină: MediaStore — pentru lucrul în lot cu media, SAF — pentru selectarea fișierelor individuale de către utilizator.

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.

Discutați proiectul

Citiți și