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 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.
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.
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.
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))
}
}
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.
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.
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.
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.
| Medientyp | Berechtigung (API 33+) | Bisher (API 29–32) |
|---|---|---|
| Bilder | READ_MEDIA_IMAGES | READ_EXTERNAL_STORAGE |
| Video | READ_MEDIA_VIDEO | READ_EXTERNAL_STORAGE |
| Audio | READ_MEDIA_AUDIO | READ_EXTERNAL_STORAGE |
| Schreiben | WRITE_EXTERNAL_STORAGE | WRITE_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.
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.
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.
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
}
}
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 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
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.
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.
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.
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.
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
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.
Lesen Sie auch