Ab dem 27. März 2025 empfehlen wir, android-latest-release
anstelle von aosp-main
zu verwenden, um AOSP zu erstellen und Beiträge dazu zu leisten. Weitere Informationen finden Sie unter Änderungen am AOSP.
MediaProvider-Modul
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Das MediaProvider-Modul optimiert indexierte Metadaten (Audio, Video und Bilder von SD-Karten und USB-Speichergeräten) und stellt diese Daten über die öffentlichen APIs von MediaStore für Apps zur Verfügung.
Zum Schutz der Privatsphäre der Nutzer erzwingt das MediaProvider-Modul das Sicherheitsmodell für Speicher mit begrenztem Zugriff, das in Android 10 eingeführt wurde. Dazu gehört auch das Entfernen sensibler Standortmetadaten.
Dieses Modul kann aktualisiert werden, sodass Android-Geräte schneller auf Sicherheitsprobleme reagieren (um sensible Nutzerdaten zu schützen) und neue Medienformate schneller hinzugefügt werden können (für Konsistenz bei Nutzern und Entwicklern).
Änderungen in Android 10
Mit Android 10 wurden mehrere Verbesserungen im Zusammenhang mit der Identifizierung und dem Extrahieren von Daten aus Mediendateien eingeführt. Im Einzelnen:
Der Dateiinhaltstyp wird anhand des ersten Teils des MIME-Typs einer Datei ermittelt.
Das Betriebssystem weiß beispielsweise, dass sowohl image/png
als auch image/x-newly-invented-format
Bilder sind, und kann dem Endnutzer daher die relevanten Berechtigungen genau beschreiben.
Der MIME-Typ wird nur anhand der Dateiendung ermittelt (ohne Content-Sniffing, um Sicherheitsprobleme zu vermeiden).
Der MIME-Typ einer beliebigen Datei wird anhand einer Kombination von Upstream-Zuordnungen von Debian Linux und Android ermittelt.
Relevante Daten aus video/*
- und audio/*
-Dateien (über MediaMetadataRetriever
) und image/*
-Dateien (über ExifInterface
) zurückgeben
Änderungen in Android 11
In Android 11 baut das MediaProvider-Modul auf den Änderungen in Android 10 auf und bietet die folgenden Verbesserungen:
Verbesserungen bei der Indexierung. Im MediaProvider-Modul werden jetzt Metadaten indexiert, indem verfügbare Metadaten mit öffentlichen MediaStore-APIs abgeglichen werden. Zu den Änderungen gehören:
Neue Spalte is_favorite
und neues Argument QUERY_ARG_MATCH_FAVORITE
, mit denen in Galerie-Apps Medien schnell anhand dieser Spalte gefiltert werden können.
Indexierung von Metadaten zum Farbraum
Neue Spalte „is_trashed“ und QUERY_ARG_MATCH_TRASHED
-Argument, mit denen in Galerie-Apps nach dieser Spalte gefiltert werden kann.
Neue APIs, mit denen mehrere Elemente mit einem einzigen Dialogfeld für Nutzer geändert werden können, darunter createDeleteRequest()
, createFavoriteRequest()
, createTrashRequest()
und createWriteRequest()
.
Neue Spalten GENERATION_ADDED
und GENERATION_MODIFIED
, mit denen sich Änderungen seit einem vorherigen Synchronisierungspunkt schnell und zuverlässig erkennen lassen.
Neue GROUP BY
-Public API zur Verwendung mit zusätzlichen Metadatenspalten, die oben nicht erwähnt wurden.
Verbesserungen bei ExifInterface
zum Extrahieren von Metadaten aus PNG- und WebP-Containern.
Verbesserungen bei SystemUI
, um DateTimeOriginal
-Metadaten in Screenshots zu schreiben.
Außerdem können Sie MediaProvider jetzt anpassen, indem Sie neue Medienformate hinzufügen, angeben, welche Speichergeräte indexiert werden sollen, und sogar den MTP-Stack ersetzen. Weitere Informationen finden Sie unter Anpassung.
Modulgrenze
In Android 11 wird der gesamte Code in packages/providers/MediaProvider
an einen neuen Speicherort migriert, mit der bemerkenswerten Ausnahme der MTP-bezogenen Logik. Außerdem befindet sich frameworks/base/core/java/android/provider/MediaStore.java
jetzt innerhalb der Modulgrenze bei packages/providers/MediaProvider
.
Das MediaProvider-Modul ist im APK-in-APEX-Format.
Abhängigkeiten
MediaProvider-Abhängigkeiten beziehen sich auf Anpassungen. Wenn du MediaProvider anpasst, musst du dafür sorgen, dass deine Implementierung die mit der Anpassung verknüpfte Abhängigkeit erfüllt.
Wenn Sie benutzerdefinierte oder nicht standardmäßige Mediendateiformate verwenden (z. B. ein Format, das von einer anbieterspezifischen Kamera-App generiert wird), müssen Sie jedes benutzerdefinierte Format bei MimeUtils
und dem Media Extractor-Modul registrieren, um die Indexierung durch MediaProvider zu aktivieren.
Wenn Sie dafür sorgen möchten, dass MediaProvider eine benutzerdefinierte Gruppe von Speichergeräten (z. B. SD-Kartensteckplätze und USB-Ports) indexiert, die in einer StorageManagerService
-Implementierung verwendet werden, setzen Sie das Flag VolumeInfo.MOUNT_FLAG_INDEXABLE
.
Wenn Sie eine benutzerdefinierte (nicht AOSP-kompatible) MTP-Implementierung verwenden, muss diese ausschließlich auf öffentlichen und System-APIs basieren, damit sie mit MediaStore interagieren kann.
Personalisierung
Sie können jetzt neue Medienformate hinzufügen, festlegen, welche Speichergeräte indexiert werden, und den MTP-Stack ersetzen.
Benutzerdefinierte Medienformate Für jedes neue benutzerdefinierte Medienformat müssen Sie eine Zuordnung von der eindeutigen Dateiendung zu einem MIME-Typ angeben. Wir empfehlen Ihnen dringend, den IANA-Registrierungsvorgang zu durchlaufen.
Sie können keine Erweiterung oder MIME-Art neu definieren, die bereits in AOSP definiert ist.
Bei video/*
- und audio/*
-Dateien wird weiterhin MediaMetadataRetriever
von MediaProvider abgerufen. Verwende die Media-Extractors von Android 10, um Metadaten für benutzerdefinierte Formate zurückzugeben.
Bei image/*
-Dateien wird bei MediaProvider weiterhin Exif
für Metadaten standardisiert. Sie können android.media.ExifInterface
erweitern, um Exif
-Metadaten für beliebige benutzerdefinierte Bildformate zu extrahieren und zurückzugeben.
Flag für die Indexierung von Speichergeräten MediaProvider indexiert alle von StorageManager.getStorageVolumes()
zurückgegebenen Volumes, bei denen StorageVolume.getMediaStoreVolumeName()
nicht null ist. Sie können die Liste der zurückgegebenen Volumes anpassen, um zu beeinflussen, was indexiert wird. Wir raten jedoch davon ab, temporäre Volumes (z. B. USB-OTG-Speicher) anzugeben.
Ersatz des MTP-Stacks Unter Android 11 wird der MTP-Stack vollständig außerhalb der Modulgrenze platziert und dafür gesorgt, dass er mit öffentlichen APIs funktioniert.
Testen
Sie können die Funktion von MediaProvider mit den folgenden Tests prüfen:
Verwenden Sie zum Prüfen der Funktionalität der öffentlichen APIs von MediaStore die Tests im Paket CtsProviderTestCases
der Android Compatibility Test Suite (CTS).
Um die Funktionalität der MediaProvider-Interna zu überprüfen, verwenden Sie Tests in MediaProviderTests
.
Wenn Sie beide Testgruppen gleichzeitig ausführen möchten, verwenden Sie den folgenden atest
-Befehl:
atest --test-mapping packages/providers/MediaProvider
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2025-07-27 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-07-27 (UTC)."],[],[],null,["# MediaProvider module\n\nThe MediaProvider module optimizes indexed metadata (audio, video, and images\nfrom SD cards and USB devices) and makes that data available to apps through the\n[MediaStore public\nAPIs](https://developer.android.com/reference/android/provider/MediaStore).\nTo maintain user privacy, the MediaProvider module enforces the [scoped storage\nsecurity\nmodel](https://developer.android.com/training/data-storage/files/external-scoped)\nintroduced in Android 10, which includes redacting sensitive location metadata.\nThis module is updatable, enabling Android to respond faster to security issues\n(keeping sensitive user data protected) and add new media formats quicker\n(providing consistency to both users and developers).\n\nChanges in Android 10\n---------------------\n\nAndroid 10 introduced several improvements related to identifying and extracting\ndata from media files, specifically:\n\n- Determining the file content type using the first part of a file's MIME type.\n For example, the OS knows that both `image/png` and\n `image/x-newly-invented-format` are images, and can thus accurately describe\n relevant permissions to the end user.\n\n- Determining the MIME type using only the file extension (and without using\n [content sniffing](https://en.wikipedia.org/wiki/Content_sniffing)\n to avoid security issues).\n\n- Determining the MIME type of an arbitrary file using a combination of\n [upstream Debian Linux and Android\n mappings](https://android-review.googlesource.com/c/platform/libcore/+/735506).\n\n- Returning relevant data from `video/*` and `audio/*` files (via\n `MediaMetadataRetriever`) and `image/*` files (via `ExifInterface`).\n\nChanges in Android 11\n---------------------\n\nIn Android 11, the MediaProvider module builds on the\nchanges made in Android 10 with the following improvements:\n\n- Improvements to indexing. The MediaProvider module now indexes metadata by\n reconciling available metadata against MediaStore public APIs. Changes\n include:\n\n - New `is_favorite` column and `QUERY_ARG_MATCH_FAVORITE` argument to enable\n gallery-style apps to quickly filter media based on this column.\n\n - Indexing color space metadata.\n\n - New 'is_trashed' column and `QUERY_ARG_MATCH_TRASHED` argument to enable\n gallery-style apps to filter based on this column.\n\n - New APIs that enable bulk-modification of multiple items with a single user\n dialog prompt, including `createDeleteRequest()`, `createFavoriteRequest()`,\n `createTrashRequest()`, and `createWriteRequest()`.\n\n - New `GENERATION_ADDED` and `GENERATION_MODIFIED` columns for use in quickly\n and reliably detecting changes that have occurred since a previous\n synchronization point.\n\n - New `GROUP BY` public API for use with additional metadata columns not\n mentioned above.\n\n- Improvement to `ExifInterface` to extract metadata from PNG and WebP\n containers.\n\n- Improvements to `SystemUI` to write `DateTimeOriginal` metadata in screen\n captures.\n\nIn addition, you can now customize MediaProvider by adding new media formats,\nmarking which storage devices should be indexed, and even replacing the MTP\nstack. For details, see [Customization](#customization).\n\nModule boundary\n---------------\n\nAndroid 11 migrates all code in\n`packages/providers/MediaProvider` to a new location, with the notable exception\nof MTP-related logic. In addition,\n`frameworks/base/core/java/android/provider/MediaStore.java` is now *inside* the\nmodule boundary at `packages/providers/MediaProvider`.\n\nPackage format\n--------------\n\nThe MediaProvider module is in APK-in-APEX format.\n\nDependencies\n------------\n\nMediaProvider dependencies are related to [customizations](#customization) (that\nis, if you customize MediaProvider, you must ensure your implementation meets\nthe dependency associated with your customization).\n\n- When using custom or nonstandard media file formats (for example, a format\n generated by a vendor-specific Camera app), you must register each custom\n format with `MimeUtils` and the Media Extractor module to enable indexing by\n MediaProvider.\n\n- To ensure MediaProvider indexes a custom set of storage devices (such SD card\n slots and USB ports) used in a `StorageManagerService` implementation, set the\n `VolumeInfo.MOUNT_FLAG_INDEXABLE` flag.\n\n- When using a custom (non-AOSP) MTP implementation, ensure the implementation\n relies solely on public and system APIs to enable the implementation to\n interact with MediaStore.\n\nCustomization\n-------------\n\nYou can now add new media formats, influence which storage devices are indexed,\nand replace the MTP stack.\n\n- **Custom media formats.** For each new custom media format, you must provide a\n mapping from the unique file extension to a MIME type. We strongly encourage\n you to follow the [IANA registration\n process](https://www.iana.org/assignments/media-types/media-types.xhtml).\n\n - You can't redefine an extension or MIME type that's already defined in AOSP.\n\n - For `video/*` and `audio/*` files, MediaProvider continues consulting\n `MediaMetadataRetriever`. Use the Android 10 Media Extractors to return\n metadata for custom formats.\n\n - For `image/*` files, MediaProvider continues standardizing on `Exif` for\n metadata. You can extend `android.media.ExifInterface` to extract and return\n `Exif` metadata for any custom image formats.\n\n- **Storage devices indexing flag.** MediaProvider indexes all volumes returned\n by `StorageManager.getStorageVolumes()` where\n `StorageVolume.getMediaStoreVolumeName()` is non-null. You can customize the\n list of volumes returned to influence what is indexed, but we advise against\n including transient volumes (such as USB OTG drives).\n\n- **MTP stack replacement.** Android 11 places the MTP\n stack entirely outside the module boundary and ensures that it works against\n public APIs.\n\nTesting\n-------\n\nYou can verify the functionality of MediaProvider using the following tests:\n\n- To verify the functionality of MediaStore public APIs, use tests in the\n `CtsProviderTestCases` package of the Android Compatibility Test Suite (CTS).\n\n- To verify the functionality of MediaProvider internals, use tests in\n `MediaProviderTests`.\n\nTo run both sets of tests together, use the following `atest` command: \n\n atest --test-mapping packages/providers/MediaProvider"]]