A partir de 27 de março de 2025, recomendamos usar android-latest-release
em vez de aosp-main
para criar e contribuir com o AOSP. Para mais informações, consulte Mudanças no AOSP.
Módulo MediaProvider
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
O módulo MediaProvider otimiza metadados indexados (áudio, vídeo e imagens
de cartões SD e dispositivos USB) e disponibiliza esses dados para apps pelas
APIs públicas
MediaStore.
Para manter a privacidade do usuário, o módulo MediaProvider aplica o modelo de
segurança de armazenamento
com escopo
introduzido no Android 10, que inclui a edição de metadados de local sensíveis.
Esse módulo é atualizável, permitindo que o Android responda mais rapidamente a problemas de segurança,
protegendo dados sensíveis do usuário, e adicione novos formatos de mídia mais rapidamente,
proporcionando consistência para usuários e desenvolvedores.
Mudanças no Android 10
O Android 10 introduziu várias melhorias relacionadas à identificação e extração
de dados de arquivos de mídia, especificamente:
Determinar o tipo de conteúdo do arquivo usando a primeira parte do tipo MIME de um arquivo.
Por exemplo, o SO sabe que image/png
e
image/x-newly-invented-format
são imagens e, portanto, pode descrever com precisão
as permissões relevantes para o usuário final.
Determinar o tipo MIME usando apenas a extensão do arquivo (e sem usar
content sniffing
para evitar problemas de segurança).
Determinação do tipo MIME de um arquivo arbitrário usando uma combinação de
mapeamentos upstream do Debian Linux e do
Android.
Retorno de dados relevantes de arquivos video/*
e audio/*
(usando
MediaMetadataRetriever
) e image/*
(usando ExifInterface
).
Mudanças no Android 11
No Android 11, o módulo MediaProvider se baseia nas
mudanças feitas no Android 10 com as seguintes melhorias:
Melhorias na indexação. O módulo MediaProvider agora indexa metadados
reconciliando os metadados disponíveis com as APIs públicas do MediaStore. As mudanças
incluem:
Nova coluna is_favorite
e argumento QUERY_ARG_MATCH_FAVORITE
para permitir
que apps no estilo de galeria filtrem rapidamente a mídia com base nessa coluna.
Indexação de metadados do espaço de cores.
Nova coluna "is_trashed" e argumento QUERY_ARG_MATCH_TRASHED
para permitir
que apps no estilo de galeria filtrem com base nessa coluna.
Novas APIs que permitem a modificação em massa de vários itens com uma única caixa de diálogo
do usuário, incluindo createDeleteRequest()
, createFavoriteRequest()
,
createTrashRequest()
e createWriteRequest()
.
Novas colunas GENERATION_ADDED
e GENERATION_MODIFIED
para uso na detecção rápida e confiável de mudanças que ocorreram desde um ponto de sincronização anterior.
Nova API pública GROUP BY
para uso com outras colunas de metadados não
mencionadas acima.
Melhoria em ExifInterface
para extrair metadados de contêineres PNG e
WebP.
Melhorias no SystemUI
para gravar metadados DateTimeOriginal
em capturas
de tela.
Além disso, agora é possível personalizar o MediaProvider adicionando novos formatos de mídia,
marcando quais dispositivos de armazenamento devem ser indexados e até mesmo substituindo a pilha
MTP. Para mais detalhes, consulte Personalização.
Limite do módulo
O Android 11 migra todo o código em
packages/providers/MediaProvider
para um novo local, com a exceção da lógica
relacionada ao MTP. Além disso,
frameworks/base/core/java/android/provider/MediaStore.java
agora está dentro do
limite do módulo em packages/providers/MediaProvider
.
O módulo MediaProvider está no formato APK-in-APEX.
Dependências
As dependências do MediaProvider estão relacionadas a personalizações.
Ou seja, se você personalizar o MediaProvider, precisará garantir que sua implementação atenda
à dependência associada à personalização.
Ao usar formatos de arquivo de mídia personalizados ou não padrão (por exemplo, um formato
gerado por um app de câmera específico do fornecedor), registre cada formato
personalizado com MimeUtils
e o módulo Media Extractor para ativar a indexação pelo
MediaProvider.
Para garantir que o MediaProvider indexe um conjunto personalizado de dispositivos de armazenamento (como slots de cartão SD
e portas USB) usados em uma implementação de StorageManagerService
, defina a
flag VolumeInfo.MOUNT_FLAG_INDEXABLE
.
Ao usar uma implementação MTP personalizada (não AOSP), verifique se ela
depende apenas de APIs públicas e do sistema para permitir que ela
interaja com a MediaStore.
Personalização
Agora é possível adicionar novos formatos de mídia, influenciar quais dispositivos de armazenamento são indexados
e substituir a pilha MTP.
Formatos de mídia personalizados. Para cada novo formato de mídia personalizado, é necessário fornecer um
mapeamento da extensão de arquivo exclusiva para um tipo MIME. Recomendamos
que você siga o processo de registro da
IANA.
Não é possível redefinir uma extensão ou um tipo MIME que já está definido no AOSP.
Para arquivos video/*
e audio/*
, o MediaProvider continua consultando
MediaMetadataRetriever
. Use os extratores de mídia do Android 10 para retornar
metadados de formatos personalizados.
Para arquivos image/*
, o MediaProvider continua padronizando em Exif
para
metadados. É possível estender android.media.ExifInterface
para extrair e retornar
metadados Exif
para qualquer formato de imagem personalizado.
Flag de indexação de dispositivos de armazenamento. O MediaProvider indexa todos os volumes retornados
por StorageManager.getStorageVolumes()
em que
StorageVolume.getMediaStoreVolumeName()
não é nulo. É possível personalizar a
lista de volumes retornados para influenciar o que é indexado, mas não recomendamos
incluir volumes temporários (como unidades USB OTG).
Substituição da pilha MTP. O Android 11 coloca a pilha MTP
inteiramente fora do limite do módulo e garante que ela funcione com
APIs públicas.
Teste
É possível verificar a funcionalidade do MediaProvider usando os seguintes testes:
Para verificar a funcionalidade das APIs públicas do MediaStore, use testes no
pacote CtsProviderTestCases
do Teste de compatibilidade do Android (CTS).
Para verificar a funcionalidade de elementos internos do MediaProvider, use os testes em
MediaProviderTests
.
Para executar os dois conjuntos de testes juntos, use o comando atest
a seguir:
atest --test-mapping packages/providers/MediaProvider
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2025-07-27 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 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"]]