MediaStore API: Was es ist, Funktionen und Arbeiten mit gemeinsamen Mediendateien

Autor: IT Sectr Veröffentlicht: 2026-07-10 Lesezeit: 7 Min.

MediaStore API ist eine Android-Schnittstelle für den Zugriff auf die gemeinsamen Mediendateien des Geräts: Bilder, Videos, Audio und Dokumente. Im Gegensatz zum direkten Dateizugriff arbeitet MediaStore über eine zentrale Mediendatenbank und einen Content Provider. Laut Android Developers Documentation (2025) wurde die API ab Android 10 zum primären Mechanismus für die Arbeit mit Medien und ersetzte das veraltete READ_EXTERNAL_STORAGE. Entwickler verwenden MediaStore in Galerien, Musikplayern, Kameras und Dateimanagern.

Wichtige Punkte

  • MediaStore ist der System-Content-Provider von Android für den Zugriff auf gemeinsame Mediendateien des Geräts.
  • Mediendatenbank indiziert zentral alle Bilder, Videos und Audiodaten auf dem Gerät.
  • Android 10 machte MediaStore zum einzigen Weg, um auf gemeinsame Mediendateien zuzugreifen.
  • URI-Referenzen ersetzen direkte Dateipfade und gewährleisten sicheren Zugriff.
  • Berechtigungen werden nach Medientyp angefordert: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO.

Was ist die MediaStore API?

MediaStore API ist ein System-Content-Provider auf der Android-Plattform, der zum Indizieren, Speichern und Bereitstellen des Zugriffs auf Mediendateien des Geräts entwickelt wurde. Die API ist Teil des Android SDK und seit API Level 1 verfügbar.

MediaStore arbeitet über eine einheitliche Mediendatenbank, die das Gerät automatisch scannt und Metadaten aller Mediendateien sammelt. Die Datenbank wird vom System aktualisiert, wenn Dateien hinzugefügt, geändert oder gelöscht werden, sodass Anwendungen ohne manuelles Scannen immer aktuelle Informationen erhalten.

Die Haupttabellen von MediaStore sind: Images (Bilder), Video (Videos), Audio (Audiodateien) und Files (allgemeine Dateien). Jede Tabelle enthält Spalten mit Metadaten: Name, Erstellungsdatum, Größe, MIME-Typ, GPS-Koordinaten und andere Attribute.

Entwicklung von MediaStore in Android-Versionen

Vor Android 10 verwendeten Entwickler READ_EXTERNAL_STORAGE für den Zugriff auf alle Gerätedateien. Android 10 (API 29) führte Scoped Storage ein: Anwendungen konnten nur auf ihre eigenen Dateien und über MediaStore zugreifen. Android 11 verschärfte die Richtlinie und blockierte den direkten Pfad zu freigegebenen Verzeichnissen vollständig.

Ab Android 13 (API 33) ersetzte Google READ_EXTERNAL_STORAGE durch granulare Berechtigungen: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO und READ_MEDIA_AUDIO. Dadurch können Benutzer den Zugriff nur auf bestimmte Medientypen gewähren, ohne den gesamten Speicher offenzulegen.

Wie MediaStore funktioniert: Architektur und Mediendatenbank

MediaStore basiert auf einer Content-Provider-Architektur: Jede Anwendung greift über ContentResolver und Uri darauf zu. Der System-Medienscanner — MediaScannerConnection — indiziert automatisch alle Dateien auf dem Gerät beim Booten, bei USB-Verbindung oder Neustart.

Die Mediendatenbank wird in der Systemdatenbank gespeichert und enthält Datensätze für jede Mediendatei. Die Spalten unterscheiden sich je nach Typ: Bilder haben ORIENTATION und DATE_TAKEN, Videos haben DURATION, Audiodateien haben ARTIST und ALBUM. Entwickler können SQL-ähnliche Abfragen mit query, projection und selection zum Filtern ausführen.

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-URIs und ihre Bedeutung

Jede Mediendatei wird durch eine Content-URI wie content://media/external/images/media/1234 identifiziert. Die externe URI zeigt auf den gemeinsamen Speicher, während die interne URI auf Systemmediendateien zeigt. Die Verwendung von URIs anstelle von Dateipfaden ist ein Hauptvorteil von MediaStore: Die Anwendung benötigt keinen Dateisystemzugriff und arbeitet über einen sicheren Content Provider.

Mediendateitypen in MediaStore

MediaStore unterstützt vier Hauptmedientypen, jeweils mit eigener Tabelle und eigenem Metadatensatz. Entwickler wählen die passende Tabelle basierend auf dem Inhaltstyp, mit dem ihre Anwendung arbeitet.

  • MediaStore.Images — Fotos, Screenshots und Bilder. Spalten: BUCKET_DISPLAY_NAME, IS_PRIVATE, LATITUDE, LONGITUDE.
  • MediaStore.Video — Videoaufnahmen und Filme. Spalten: DURATION, RESOLUTION, IS_DRM.
  • MediaStore.Audio — Musiktitel und Audiodateien. Spalten: ARTIST, ALBUM, COMPOSER, TRACK.
  • MediaStore.Files — Dokumente und andere Dateien. Verfügbar seit Android 10 für gemeinsamen Zugriff.

Zusätzlich zu den Standardspalten enthält jede Tabelle Systemfelder: _ID, DATA (veraltet), SIZE, MIME_TYPE, DATE_ADDED, DATE_MODIFIED. Seit Android 10 ist das DATA-Feld als veraltet markiert, und Entwickler sollten durch Öffnen eines InputStreams über URI arbeiten.

Berechtigungen für die Arbeit mit MediaStore

MediaStore erfordert explizite Berechtigungen, die je nach Android-Version unterschiedlich sind. Vor Android 13 wurde die einzelne Berechtigung READ_EXTERNAL_STORAGE verwendet. Ab Android 13 (API 33) führte Google granulare Berechtigungen für jeden Medientyp ein.

MedientypBerechtigung (API 33+)Bisher (API 29–32)
BilderREAD_MEDIA_IMAGESREAD_EXTERNAL_STORAGE
VideoREAD_MEDIA_VIDEOREAD_EXTERNAL_STORAGE
AudioREAD_MEDIA_AUDIOREAD_EXTERNAL_STORAGE
SchreibenWRITE_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE

Schreiben in MediaStore erfordert auch WRITE_EXTERNAL_STORAGE für Android 9 und niedriger. Ab Android 10 kann eine Anwendung ohne zusätzliche Berechtigungen in MediaStore schreiben — das System gewährt beim Einfügen eines Datensatzes über ContentResolver.insert automatisch Zugriff.

Berechtigungen zur Laufzeit anfordern

MediaStore-Berechtigungen werden über den Standardmechanismus ActivityResultContracts.RequestMultiplePermissions angefordert. Der Benutzer kann die Anfrage ablehnen, und die Anwendung muss dieses Szenario korrekt behandeln. Es wird empfohlen, die Berechtigung vor jedem Zugriff auf MediaStore über ContextCompat.checkSelfPermission zu überprüfen.

Codebeispiele: Lesen und Schreiben mit MediaStore

MediaStore ermöglicht nicht nur das Lesen, sondern auch das Schreiben von Mediendateien. Zum Schreiben eines Bildes oder Videos verwendet der Entwickler ContentResolver.insert und öffnet einen OutputStream für die zurückgegebene URI. Das System fügt die Datei automatisch zur Mediendatenbank hinzu und indiziert sie.

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 ->
        // Bytes in Stream schreiben
    }
}

Löschen von Mediendateien über MediaStore

Das Löschen erfolgt über ContentResolver.delete mit der URI der Datei. Das System prüft die Zugriffsrechte: Wenn die Datei zur aktuellen Anwendung gehört, erfolgt das Löschen ohne zusätzliche Berechtigungen. Für Dateien anderer Anwendungen auf Android 10+ ist eine Benutzerbestätigung über einen Systemdialog erforderlich.

MediaStore vs. direkter Dateizugriff

MediaStore API unterscheidet sich grundlegend vom direkten Dateizugriff über die File-API. Statt Dateipfaden werden Content-URIs verwendet, und statt Dateioperationen werden ContentResolver-Methoden verwendet. Dies bietet drei Hauptvorteile: Sicherheit, automatische Indizierung und eine einheitliche Schnittstelle.

Der direkte Dateizugriff ist auf Android 10+ für gemeinsame Verzeichnisse eingeschränkt. MediaStore bleibt der einzige Weg, um Medien aus Pictures, DCIM, Movies, Music und Download zu lesen. Für anwendungsspezifische Dateien (app-specific storage) bleibt der direkte Zugriff erhalten — dies sind Ordner in Android/data und Android/media.

Die Wahl zwischen MediaStore und direktem Zugriff hängt vom Inhaltstyp ab. MediaStore ist für gemeinsame Mediendateien obligatorisch, die für andere Anwendungen zugänglich sind. Die direkte File-API eignet sich für interne Anwendungsdateien und Cache. Das Storage Access Framework wird zum Auswählen beliebiger Dokumente über die Systemauswahl verwendet.

Häufig gestellte Fragen

Was ist die MediaStore API in Android?

MediaStore API ist der System-Content-Provider von Android für den Zugriff auf Mediendateien des Geräts: Bilder, Videos, Audio und Dokumente. Die API bietet eine einheitliche Schnittstelle über ContentResolver und eine Mediendatenbank, die automatisch alle Dateien indiziert.

Welche Medientypen unterstützt MediaStore?

MediaStore unterstützt Images (Bilder), Video (Videos), Audio (Audiodateien) und Files (Dokumente). Jeder Typ hat seine eigene Tabelle mit eigenem Metadatensatz: Bilder haben ORIENTATION, Videos haben DURATION, Audiodateien haben ARTIST.

Welche Berechtigungen werden für MediaStore auf Android 13 benötigt?

Unter Android 13+ werden granulare Berechtigungen verwendet: READ_MEDIA_IMAGES für Bilder, READ_MEDIA_VIDEO für Videos und READ_MEDIA_AUDIO für Audio. Der Benutzer kann den Zugriff nur auf bestimmte Medientypen gewähren.

Wie schreibe ich eine Datei über MediaStore?

Zum Schreiben erstellen Sie ContentValues mit Name und MIME-Typ, rufen ContentResolver.insert auf, um eine URI zu erhalten, und öffnen dann einen OutputStream über ContentResolver.openOutputStream. Das System indiziert die neue Datei automatisch.

Wie unterscheidet sich MediaStore vom Storage Access Framework?

MediaStore bietet programmatischen Zugriff auf alle Mediendateien des Geräts über eine Mediendatenbank. Storage Access Framework öffnet einen Systemdialog zur Dateiauswahl und gibt eine URI zurück — der Benutzer wählt eine bestimmte Datei oder einen Ordner aus.

Zusammenfassung

  • MediaStore API ist der primäre Mechanismus für den Zugriff auf Android-Medien und arbeitet über einen Content Provider und eine Mediendatenbank.
  • Mediendatenbank indiziert automatisch Bilder, Videos, Audio und Dokumente und bietet Metadatenzugriff über ContentResolver.
  • Android 10 machte MediaStore zur einzigen Möglichkeit, auf gemeinsame Mediendateien zuzugreifen, und schränkte den direkten Dateizugriff ein.
  • Android 13 führte granulare Berechtigungen READ_MEDIA_IMAGES, READ_MEDIA_VIDEO und READ_MEDIA_AUDIO anstelle von READ_EXTERNAL_STORAGE ein.
  • Content-URI ersetzt Dateipfade und gewährleistet sicheren Zugriff ohne Root-Rechte auf Dateien anderer Anwendungen.
  • Schreiben über MediaStore erfolgt über ContentResolver.insert und openOutputStream mit automatischer Indizierung in der Mediendatenbank.
  • Wahl zwischen MediaStore und SAF hängt von der Aufgabe ab: MediaStore für Stapelverarbeitung von Medien, SAF für die Auswahl einzelner Dateien durch den Benutzer.

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch