A partir del 27 de marzo de 2025, te recomendamos que uses android-latest-release
en lugar de aosp-main
para compilar y contribuir a AOSP. Para obtener más información, consulta Cambios en AOSP.
Módulo MediaProvider
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
El módulo MediaProvider optimiza los metadatos indexados (audio, video e imágenes de tarjetas SD y dispositivos USB) y pone esos datos a disposición de las apps a través de las APIs públicas de MediaStore.
Para mantener la privacidad del usuario, el módulo MediaProvider aplica el modelo de seguridad de almacenamiento centrado que se introdujo en Android 10, que incluye la ocultación de metadatos de ubicación sensibles.
Este módulo se puede actualizar, lo que permite que Android responda más rápido a los problemas de seguridad (manteniendo protegidos los datos sensibles del usuario) y agregue nuevos formatos de contenido multimedia más rápido (lo que proporciona coherencia a los usuarios y desarrolladores).
Cambios en Android 10
En Android 10, se incluyeron varias mejoras relacionadas con la identificación y extracción de datos de archivos multimedia, en particular:
Determina el tipo de contenido del archivo con la primera parte del tipo de MIME de un archivo.
Por ejemplo, el SO sabe que image/png
y image/x-newly-invented-format
son imágenes y, por lo tanto, puede describir con precisión los permisos relevantes al usuario final.
Determinar el tipo de MIME solo con la extensión del archivo (y sin usar detección de contenido para evitar problemas de seguridad)
Determinar el tipo MIME de un archivo arbitrario con una combinación de asignaciones de Android y Debian Linux upstream
Devuelve datos relevantes de los archivos video/*
y audio/*
(a través de MediaMetadataRetriever
) y de los archivos image/*
(a través de ExifInterface
).
Cambios en Android 11
En Android 11, el módulo MediaProvider se basa en los cambios realizados en Android 10 con las siguientes mejoras:
Se realizaron mejoras en la indexación. El módulo MediaProvider ahora indexa los metadatos a través de la conciliación de los metadatos disponibles con las APIs públicas de MediaStore. Entre los cambios, se incluyen los siguientes:
Nueva columna is_favorite
y argumento QUERY_ARG_MATCH_FAVORITE
para permitir que las apps de estilo de galería filtren rápidamente el contenido multimedia en función de esta columna.
Indexación de metadatos de espacio de color
Nueva columna "is_trashed" y argumento QUERY_ARG_MATCH_TRASHED
para permitir que las apps de estilo de galería filtren según esta columna.
Nuevas APIs que permiten la modificación masiva de varios elementos con una sola instrucción de diálogo del usuario, incluidas createDeleteRequest()
, createFavoriteRequest()
, createTrashRequest()
y createWriteRequest()
.
Nuevas columnas GENERATION_ADDED
y GENERATION_MODIFIED
para detectar de forma rápida y confiable los cambios que se produjeron desde un punto de sincronización anterior.
Nueva API pública de GROUP BY
para usar con columnas de metadatos adicionales que no se mencionaron anteriormente.
Se realizaron mejoras en ExifInterface
para extraer metadatos de contenedores PNG y WebP.
Se realizaron mejoras en SystemUI
para escribir metadatos DateTimeOriginal
en capturas de pantalla.
Además, ahora puedes personalizar MediaProvider agregando nuevos formatos de contenido multimedia, marcando qué dispositivos de almacenamiento se deben indexar y hasta reemplazando la pila de MTP. Para obtener más información, consulta Personalización.
Límite del módulo
Android 11 migra todo el código de packages/providers/MediaProvider
a una ubicación nueva, con la excepción notable de la lógica relacionada con MTP. Además, frameworks/base/core/java/android/provider/MediaStore.java
ahora está dentro del límite del módulo en packages/providers/MediaProvider
.
El módulo MediaProvider está en formato APK-in-APEX.
Dependencias
Las dependencias de MediaProvider se relacionan con las personalizaciones (es decir, si personalizas MediaProvider, debes asegurarte de que tu implementación cumpla con la dependencia asociada con tu personalización).
Cuando uses formatos de archivos multimedia personalizados o no estándar (por ejemplo, un formato que genera una app de cámara específica del fabricante), debes registrar cada formato personalizado con MimeUtils
y el módulo Media Extractor para habilitar la indexación por MediaProvider.
Para garantizar que MediaProvider indexe un conjunto personalizado de dispositivos de almacenamiento (como ranuras para tarjetas SD y puertos USB) que se usan en una implementación de StorageManagerService
, establece la marca VolumeInfo.MOUNT_FLAG_INDEXABLE
.
Cuando uses una implementación de MTP personalizada (no AOSP), asegúrate de que esta dependa únicamente de las APIs públicas y del sistema para permitir que interactúe con MediaStore.
Personalización
Ahora puedes agregar nuevos formatos multimedia, influir en qué dispositivos de almacenamiento se indexan y reemplazar la pila de MTP.
Formatos multimedia personalizados. Para cada formato multimedia personalizado nuevo, debes proporcionar una asignación de la extensión de archivo única a un tipo de MIME. Te recomendamos que sigas el proceso de registro de la IANA.
No puedes redefinir una extensión o un tipo MIME que ya esté definido en AOSP.
En el caso de los archivos video/*
y audio/*
, MediaProvider continúa consultando MediaMetadataRetriever
. Usa los extractores de contenido multimedia de Android 10 para mostrar metadatos de formatos personalizados.
En el caso de los archivos image/*
, MediaProvider continúa estandarizando en Exif
para los metadatos. Puedes extender android.media.ExifInterface
para extraer y mostrar metadatos Exif
para cualquier formato de imagen personalizado.
Marca de indexación de dispositivos de almacenamiento MediaProvider indexa todos los volúmenes que muestra StorageManager.getStorageVolumes()
, en los que StorageVolume.getMediaStoreVolumeName()
no es nulo. Puedes personalizar la lista de volúmenes que se muestran para influir en lo que se indexa, pero te recomendamos que no incluyas volúmenes transitorios (como unidades USB OTG).
Reemplazo de la pila de MTP: Android 11 coloca la pila de MTP completamente fuera del límite del módulo y se asegura de que funcione con las APIs públicas.
Prueba
Puedes verificar la funcionalidad de MediaProvider con las siguientes pruebas:
Para verificar la funcionalidad de las APIs públicas de MediaStore, usa pruebas en el paquete CtsProviderTestCases
del conjunto de pruebas de compatibilidad de Android (CTS).
Para verificar la funcionalidad de los elementos internos de MediaProvider, usa pruebas en MediaProviderTests
.
Para ejecutar ambos conjuntos de pruebas, usa el siguiente comando atest
:
atest --test-mapping packages/providers/MediaProvider
El contenido y las muestras de código que aparecen en esta página están sujetas a las licencias que se describen en la Licencia de Contenido. Java y OpenJDK son marcas registradas de Oracle o sus afiliados.
Última actualización: 2025-07-27 (UTC)
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Falta la información que necesito","missingTheInformationINeed","thumb-down"],["Muy complicado o demasiados pasos","tooComplicatedTooManySteps","thumb-down"],["Desactualizado","outOfDate","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Problema con las muestras o los códigos","samplesCodeIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 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"]]