MediaStore API — is de Android-interface voor toegang tot de gedeelde mediabestanden van het apparaat: afbeeldingen, video's, audio en documenten. In tegenstelling tot directe bestandstoegang werkt MediaStore via een gecentraliseerde mediadatabase en contentprovider. Volgens Android Developers Documentation (2025) is de API vanaf Android 10 het belangrijkste mechanisme voor het werken met media geworden in plaats van de verouderde READ_EXTERNAL_STORAGE. Ontwikkelaars gebruiken MediaStore in galerijen, muziekspelers, camera's en bestandsbeheerders.
Belangrijkste punten
MediaStore API — is een systeemcontentprovider op het Android-platform, bedoeld voor het indexeren, opslaan en verlenen van toegang tot mediabestanden van het apparaat. De API maakt deel uit van de Android SDK en is beschikbaar vanaf API Level 1.
MediaStore werkt via een uniforme mediadatabase die het apparaat automatisch scant en metadata van alle mediabestanden verzamelt. De database wordt door het systeem bijgewerkt bij het toevoegen, wijzigen of verwijderen van bestanden, zodat applicaties altijd actuele informatie krijgen zonder handmatig scannen.
De belangrijkste MediaStore-tabellen: Images (afbeeldingen), Video (video's), Audio (audio) en Files (algemene bestanden). Elke tabel bevat kolommen met metadata: naam, aanmaakdatum, grootte, MIME-type, GPS-coördinaten en andere kenmerken.
Vóór Android 10 gebruikten ontwikkelaars READ_EXTERNAL_STORAGE voor toegang tot alle bestanden op het apparaat. Android 10 (API 29) introduceerde Scoped Storage: applicaties kregen alleen toegang tot hun eigen bestanden en via MediaStore. Android 11 scherpte het beleid aan door de directe weg naar gedeelde mappen volledig te blokkeren.
Vanaf Android 13 (API 33) heeft Google READ_EXTERNAL_STORAGE vervangen door granulaire toestemmingen: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO en READ_MEDIA_AUDIO. Hierdoor kan de gebruiker alleen toegang verlenen tot bepaalde mediatypen zonder de hele opslag bloot te geven.
MediaStore is gebouwd op de contentprovider-architectuur: elke applicatie heeft er toegang toe via ContentResolver en Uri. De systeemmediascanner — MediaScannerConnection — indexeert automatisch alle bestanden op het apparaat bij het opstarten, aansluiten via USB of opnieuw opstarten.
De mediadatabase wordt opgeslagen in de systeemdatabase en bevat records voor elk mediabestand. Kolommen verschillen per type: afbeeldingen hebben ORIENTATION en DATE_TAKEN, video's — DURATION, audio — ARTIST en ALBUM. Ontwikkelaars kunnen SQL-achtige query's uitvoeren via query met projection en selection voor filtering.
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))
}
}
Elk mediabestand wordt geïdentificeerd door een Content URI van de vorm content://media/external/images/media/1234. Externe URI (external) verwijst naar de gedeelde opslag, interne (internal) — naar systeemmediabestanden. Het gebruik van URI in plaats van bestandspaden — het belangrijkste voordeel van MediaStore: de applicatie heeft geen toegang tot het bestandssysteem nodig en werkt via een veilige contentprovider.
MediaStore ondersteunt vier hoofdmediatypen, elk met een aparte tabel en set metadata. Ontwikkelaars kiezen de juiste tabel op basis van het type inhoud waarmee de applicatie werkt.
Naast de standaardkolommen bevat elke tabel systeemvelden: _ID, DATA (verouderd), SIZE, MIME_TYPE, DATE_ADDED, DATE_MODIFIED. Vanaf Android 10 is het veld DATA gemarkeerd als deprecated en moeten ontwikkelaars werken via het openen van InputStream op basis van URI.
MediaStore vereist expliciete toestemmingen die verschillen per Android-versie. Vóór Android 13 werd de enkele toestemming READ_EXTERNAL_STORAGE gebruikt. Vanaf Android 13 (API 33) heeft Google granulaire toestemmingen geïntroduceerd voor elk mediatype.
| Mediatype | Toestemming (API 33+) | Oude (API 29-32) |
|---|---|---|
| Afbeeldingen | READ_MEDIA_IMAGES | READ_EXTERNAL_STORAGE |
| Video | READ_MEDIA_VIDEO | READ_EXTERNAL_STORAGE |
| Audio | READ_MEDIA_AUDIO | READ_EXTERNAL_STORAGE |
| Schrijven | WRITE_EXTERNAL_STORAGE | WRITE_EXTERNAL_STORAGE |
Schrijven naar MediaStore vereist ook WRITE_EXTERNAL_STORAGE voor Android 9 en lager. Vanaf Android 10 kan de applicatie zonder extra toestemmingen eigen bestanden naar MediaStore schrijven — het systeem verleent automatisch toegang bij het invoegen van een record via ContentResolver.insert.
MediaStore-toestemmingen worden aangevraagd via het standaardmechanisme ActivityResultContracts.RequestMultiplePermissions. De gebruiker kan het verzoek weigeren en de applicatie moet dit scenario correct afhandelen. Het wordt aanbevolen om de aanwezigheid van toestemming te controleren via ContextCompat.checkSelfPermission vóór elke toegang tot MediaStore.
MediaStore maakt niet alleen lezen mogelijk, maar ook het schrijven van mediabestanden. Om een afbeelding of video te schrijven, gebruikt de ontwikkelaar ContentResolver.insert en opent een OutputStream op de geretourneerde URI. Het systeem voegt het bestand automatisch toe aan de mediadatabase en indexeert het.
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 ->
// schrijf bytes naar stream
}
}
Verwijderen gebeurt via ContentResolver.delete met opgave van de URI van het bestand. Het systeem controleert de toegangsrechten: als het bestand eigendom is van de huidige applicatie, vindt verwijdering plaats zonder extra toestemmingen. Voor bestanden van andere applicaties op Android 10+ is bevestiging van de gebruiker vereist via een systeemdialoog.
MediaStore API verschilt fundamenteel van directe bestandstoegang via File API. In plaats van bestandspaden worden Content URI gebruikt en in plaats van bestandsbewerkingen — ContentResolver-methoden. Dit biedt drie belangrijke voordelen: veiligheid, automatische indexering en een uniforme interface.
Directe bestandstoegang is beperkt op Android 10+ voor gedeelde mappen. MediaStore blijft de enige manier om media te lezen uit Pictures, DCIM, Movies, Music en Download. Voor eigen bestanden van de applicatie (app-specific storage) blijft directe toegang behouden — dit zijn mappen in Android/data en Android/media.
De keuze tussen MediaStore en directe toegang hangt af van het type inhoud. MediaStore is verplicht voor gedeelde mediabestanden die toegankelijk zijn voor andere applicaties. Directe File API is geschikt voor interne bestanden van de applicatie en cache. Storage Access Framework wordt gebruikt voor het selecteren van willekeurige documenten via de systeemkiezer.
Veelgestelde vragen
MediaStore API — is de Android-systeemcontentprovider voor toegang tot de mediabestanden van het apparaat: afbeeldingen, video's, audio en documenten. De API biedt een uniforme interface via ContentResolver en de mediadatabase die automatisch alle bestanden indexeert.
MediaStore ondersteunt Images (afbeeldingen), Video (video's), Audio (audio) en Files (documenten). Elk type heeft een aparte tabel met een eigen set metadata: afbeeldingen hebben ORIENTATION, video's — DURATION, audio — ARTIST.
Op Android 13+ worden granulaire toestemmingen gebruikt: READ_MEDIA_IMAGES voor afbeeldingen, READ_MEDIA_VIDEO voor video en READ_MEDIA_AUDIO voor audio. De gebruiker kan alleen toegang verlenen tot bepaalde mediatypen.
Om te schrijven, maakt u een ContentValues met naam en MIME-type, roept u ContentResolver.insert aan om een URI te krijgen, opent u vervolgens OutputStream via ContentResolver.openOutputStream. Het systeem indexeert automatisch het nieuwe bestand.
MediaStore biedt programmatische toegang tot alle mediabestanden van het apparaat via de mediadatabase. Storage Access Framework opent een systeemdialoog voor bestandsselectie en retourneert een URI — de gebruiker kiest een specifiek bestand of map.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook