MediaStore API: wat is het, mogelijkheden en werken met gedeelde mediabestanden

Auteur: IT Sectr Gepubliceerd: 2026-07-10 Leestijd: 7 min

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 — de Android-systeemcontentprovider voor toegang tot de gedeelde mediabestanden van het apparaat.
  • Mediadatabase indexeert gecentraliseerd alle afbeeldingen, video's en audio op het apparaat.
  • Android 10 maakte MediaStore de enige manier om toegang te krijgen tot gedeelde mediabestanden.
  • Uri-koppelingen vervangen directe bestandspaden en zorgen voor veilige toegang.
  • Toestemmingen worden per mediatype aangevraagd: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO.

Wat is MediaStore API?

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.

Evolutie van MediaStore in Android-versies

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.

Hoe werkt MediaStore: architectuur en mediadatabase

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.

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's en hun betekenis

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.

Typen mediabestanden in MediaStore

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.

  • MediaStore.Images — foto's, schermafbeeldingen en tekeningen. Kolommen: BUCKET_DISPLAY_NAME, IS_PRIVATE, LATITUDE, LONGITUDE.
  • MediaStore.Video — video-opnamen en films. Kolommen: DURATION, RESOLUTION, IS_DRM.
  • MediaStore.Audio — muziektracks en geluidsbestanden. Kolommen: ARTIST, ALBUM, COMPOSER, TRACK.
  • MediaStore.Files — documenten en overige bestanden. Beschikbaar vanaf Android 10 voor algemene toegang.

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.

Toestemmingen voor MediaStore

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.

MediatypeToestemming (API 33+)Oude (API 29-32)
AfbeeldingenREAD_MEDIA_IMAGESREAD_EXTERNAL_STORAGE
VideoREAD_MEDIA_VIDEOREAD_EXTERNAL_STORAGE
AudioREAD_MEDIA_AUDIOREAD_EXTERNAL_STORAGE
SchrijvenWRITE_EXTERNAL_STORAGEWRITE_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.

Toestemmingen aanvragen tijdens runtime

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.

Codevoorbeelden: lezen en schrijven via 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.

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 ->
        // schrijf bytes naar stream
    }
}

Verwijderen van mediabestanden via MediaStore

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 vs directe bestandstoegang

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

Wat is MediaStore API in Android?

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.

Welke mediatypen ondersteunt MediaStore?

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.

Welke toestemmingen zijn nodig voor MediaStore op Android 13?

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.

Hoe schrijf ik een bestand via MediaStore?

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.

Wat is het verschil tussen MediaStore en Storage Access Framework?

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

  • MediaStore API — het belangrijkste mechanisme voor toegang tot Android-mediefiles, werkend via een contentprovider en mediadatabase.
  • Mediadatabase indexeert automatisch afbeeldingen, video's, audio en documenten en biedt toegang tot metadata via ContentResolver.
  • Android 10 maakte MediaStore de enige manier om toegang te krijgen tot gedeelde mediabestanden, waardoor directe bestandstoegang werd beperkt.
  • Android 13 introduceerde granulaire toestemmingen READ_MEDIA_IMAGES, READ_MEDIA_VIDEO en READ_MEDIA_AUDIO in plaats van een enkele READ_EXTERNAL_STORAGE.
  • Content URI vervangen bestandspaden en zorgen voor veilige toegang zonder root-rechten tot bestanden van andere applicaties.
  • Schrijven via MediaStore gebeurt via ContentResolver.insert en openOutputStream met automatische indexering in de mediadatabase.
  • Keuze tussen MediaStore en SAF hangt af van de taak: MediaStore — voor batchverwerking van media, SAF — voor het selecteren van afzonderlijke bestanden door de gebruiker.

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.

Bespreek het project

Lees ook