A partire dal 27 marzo 2025, ti consigliamo di utilizzare android-latest-release
anziché aosp-main
per compilare e contribuire ad AOSP. Per ulteriori informazioni, vedi Modifiche ad AOSP.
Modulo MediaProvider
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Il modulo MediaProvider ottimizza i metadati indicizzati (audio, video e immagini da schede SD e dispositivi USB) e rende questi dati disponibili per le app tramite le API pubbliche MediaStore.
Per mantenere la privacy degli utenti, il modulo MediaProvider applica il modello di sicurezza per lo stoccaggio con ambito introdotto in Android 10, che include l'oscuramento dei metadati sulla posizione sensibili.
Questo modulo è aggiornabile, il che consente ad Android di rispondere più rapidamente ai problemi di sicurezza
(mantenendo protetti i dati utente sensibili) e di aggiungere nuovi formati multimediali più rapidamente
(garantendo la coerenza sia agli utenti sia agli sviluppatori).
Modifiche in Android 10
Android 10 ha introdotto diversi miglioramenti relativi all'identificazione ed estrazione di dati dai file multimediali, in particolare:
Determinazione del tipo di contenuti del file utilizzando la prima parte del tipo MIME di un file.
Ad esempio, il sistema operativo sa che sia image/png
che
image/x-newly-invented-format
sono immagini e può quindi descrivere con precisione
le autorizzazioni pertinenti all'utente finale.
Determinazione del tipo MIME utilizzando solo l'estensione del file (e senza utilizzare
content sniffing
per evitare problemi di sicurezza).
Determinazione del tipo MIME di un file arbitrario utilizzando una combinazione di
mappature di Debian Linux e Android upstream.
Restituzione di dati pertinenti dai file video/*
e audio/*
(tramite
MediaMetadataRetriever
) e dai file image/*
(tramite ExifInterface
).
Modifiche in Android 11
In Android 11, il modulo MediaProvider si basa sulle modifiche apportate in Android 10 con i seguenti miglioramenti:
Miglioramenti all'indicizzazione. Il modulo MediaProvider ora indicizza i metadati riconciliando quelli disponibili con le API pubbliche di MediaStore. Le modifiche includeranno:
Nuova colonna is_favorite
e nuovo argomento QUERY_ARG_MATCH_FAVORITE
per consentire alle app in stile galleria di filtrare rapidamente i contenuti multimediali in base a questa colonna.
Indicizzazione dei metadati dello spazio colore.
Nuova colonna "is_trashed" e argomento QUERY_ARG_MATCH_TRASHED
per consentire alle app in stile galleria di filtrare in base a questa colonna.
Nuove API che consentono la modifica collettiva di più elementi con un singolo prompt della finestra di dialogo dell'utente, tra cui createDeleteRequest()
, createFavoriteRequest()
,
createTrashRequest()
e createWriteRequest()
.
Nuove colonne GENERATION_ADDED
e GENERATION_MODIFIED
da utilizzare per rilevare rapidamente e in modo affidabile le modifiche che si sono verificate da un punto di sincronizzazione precedente.
Nuova API pubblica GROUP BY
da utilizzare con colonne di metadati aggiuntive non elencate sopra.
Miglioramento di ExifInterface
per estrarre i metadati dai contenitori PNG e WebP.
Miglioramenti a SystemUI
per scrivere i metadati DateTimeOriginal
nelle schermate acquisite.
Inoltre, ora puoi personalizzare MediaProvider aggiungendo nuovi formati multimediali, contrassegnando i dispositivi di archiviazione da indicizzare e persino sostituendo la pila MTP. Per maggiori dettagli, vedi Personalizzazione.
Confine del modulo
Android 11 esegue la migrazione di tutto il codice in
packages/providers/MediaProvider
in una nuova posizione, con la notevole eccezione
della logica relativa a MTP. Inoltre,frameworks/base/core/java/android/provider/MediaStore.java
ora si trova all'interno del confine del modulo a packages/providers/MediaProvider
.
Il modulo MediaProvider è in formato APK-in-APEX.
Dipendenze
Le dipendenze di MediaProvider sono correlate alle personalizzazioni (ovvero, se personalizzi MediaProvider, devi assicurarti che l'implementazione soddisfi la dipendenza associata alla personalizzazione).
Quando utilizzi formati di file multimediali personalizzati o non standard (ad esempio un formato generato da un'app Fotocamera specifica del fornitore), devi registrare ogni formato personalizzato con MimeUtils
e il modulo Media Extractor per attivare l'indicizzazione da parte di MediaProvider.
Per assicurarti che MediaProvider indicizzi un insieme personalizzato di dispositivi di archiviazione (ad esempio gli slot per schede SD e le porte USB) utilizzati in un'implementazione di StorageManagerService
, imposta il flag VolumeInfo.MOUNT_FLAG_INDEXABLE
.
Quando utilizzi un'implementazione MTP personalizzata (non AOSP), assicurati che si basi esclusivamente sulle API di sistema e pubbliche per consentirle di interagire con MediaStore.
Personalizzazione
Ora puoi aggiungere nuovi formati multimediali, influire sui dispositivi di archiviazione indicizzati e sostituire lo stack MTP.
Formati multimediali personalizzati. Per ogni nuovo formato multimediale personalizzato, devi fornire una mappatura dall'estensione file univoca a un tipo MIME. Ti consigliamo vivamente di seguire la procedura di registrazione IANA.
Non puoi ridefinire un'estensione o un tipo MIME già definito in AOSP.
Per i file video/*
e audio/*
, MediaProvider continua a consultare
MediaMetadataRetriever
. Utilizza gli estrattori multimediali di Android 10 per restituire i metadati per i formati personalizzati.
Per i file image/*
, MediaProvider continua a standardizzare su Exif
per i metadati. Puoi estendere android.media.ExifInterface
per estrarre e restituire i metadati Exif
per qualsiasi formato di immagine personalizzato.
Flag di indicizzazione dei dispositivi di archiviazione. MediaProvider indicizza tutti i volumi restituiti
da StorageManager.getStorageVolumes()
se
StorageVolume.getMediaStoreVolumeName()
non è nullo. Puoi personalizzare l'elenco dei volumi restituiti per influire su ciò che viene indicizzato, ma sconsigliamo di includere volumi temporanei (ad esempio unità USB OTG).
Sostituzione dello stack MTP. Android 11 posiziona la pila MTP interamente al di fuori del confine del modulo e garantisce che funzioni con le API pubbliche.
Test
Puoi verificare la funzionalità di MediaProvider utilizzando i seguenti test:
Per verificare la funzionalità delle API pubbliche di MediaStore, utilizza i test nel
CtsProviderTestCases
pacchetto della suite di test di compatibilità Android (CTS).
Per verificare la funzionalità degli elementi interni di MediaProvider, utilizza i test in
MediaProviderTests
.
Per eseguire entrambi i set di test contemporaneamente, utilizza il seguente comando atest
:
atest --test-mapping packages/providers/MediaProvider
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2025-07-27 UTC.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 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"]]