Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Módulo MediaProvider

El módulo Mediaprovider optimiza los metadatos indexados (audio, vídeo e imágenes desde tarjetas SD y dispositivos USB) y hace que los datos disponibles para aplicaciones a través de las API públicas Mediastore . Para mantener la privacidad del usuario, el módulo Mediaprovider hace cumplir el modelo de seguridad de almacenamiento de ámbito introducido en Android 10, que incluye la disociación de sensible metadatos de ubicación. Este módulo es actualizable, lo que permite que Android responda más rápido a los problemas de seguridad (manteniendo protegidos los datos confidenciales del usuario) y agregue nuevos formatos de medios más rápido (brindando consistencia tanto a los usuarios como a los desarrolladores).

Cambios en Android 10

Android 10 introdujo varias mejoras relacionadas con la identificación y extracción de datos de archivos multimedia, específicamente:

  • Determinar el tipo de contenido del archivo utilizando la primera parte del tipo MIME de un archivo. Por ejemplo, el sistema operativo sabe que tanto image/png y de image/x-newly-invented-format son imágenes, y por lo tanto se pueden describir con precisión los permisos pertinentes para el usuario final.

  • La determinación del tipo MIME utilizando sólo la extensión del archivo (y sin necesidad de utilizar el contenido de la inhalación para evitar problemas de seguridad).

  • Determinar el tipo MIME de un archivo arbitrario usando una combinación de aguas arriba asignaciones de Debian Linux y Android .

  • Volviendo datos relevantes de video/* y audio/* archivos (vía MediaMetadataRetriever ) y image/* archivos (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:

  • Mejoras en la indexación. El módulo MediaProvider ahora indexa los metadatos conciliando los metadatos disponibles con las API públicas de MediaStore. Los cambios incluyen:

    • Nueva is_favorite columna y QUERY_ARG_MATCH_FAVORITE argumento para permitir aplicaciones de estilo galería para rápidamente medios de filtro basados en esta columna.

    • Indexación de metadatos del espacio de color.

    • Nueva 'is_trashed' columna y QUERY_ARG_MATCH_TRASHED argumento para permitir aplicaciones de estilo galería para filtrar en base a esta columna.

    • Las nuevas API que permiten a granel modificación de varios elementos, con un único usuario de diálogo del sistema, incluyendo createDeleteRequest() , createFavoriteRequest() , createTrashRequest() , y createWriteRequest() .

    • Nueva GENERATION_ADDED y GENERATION_MODIFIED columnas para uso en la detección rápida y fiable los cambios que han ocurrido desde un punto de sincronización anterior.

    • Nueva GROUP BY API pública para su uso con columnas de metadatos adicionales no mencionados anteriormente.

  • Mejoras a ExifInterface para extraer metadatos de contenedores png y WebP.

  • Mejoras en SystemUI para escribir DateTimeOriginal metadatos en capturas de pantalla.

Además, ahora puede personalizar MediaProvider agregando nuevos formatos de medios, marcando qué dispositivos de almacenamiento deben indexarse ​​e incluso reemplazando la pila MTP. Para más detalles, consulte Personalización .

Límite del módulo

Android 11 migra todo el código en packages/providers/MediaProvider a una nueva ubicación, con la notable excepción de la lógica MTP-relacionado. Además, frameworks/base/core/java/android/provider/MediaStore.java ahora está dentro de los límites de módulo en packages/providers/MediaProvider .

Formato de paquete

El módulo MediaProvider está en formato APK-in-APEX.

Dependencias

Dependencias Mediaprovider están relacionados con las personalizaciones (es decir, si se personaliza Mediaprovider, debe asegurarse de que su implementación cumple la dependencia asociada con su personalización).

  • Cuando se utiliza la costumbre o los formatos de archivo no estándar (por ejemplo, un formato generado por una aplicación de cámara específica del proveedor), debe registrar cada formato personalizado con MimeUtils y el módulo multimedia Extractor para permitir la indexación por Mediaprovider.

  • Para asegurar índices Mediaprovider un conjunto personalizado de dispositivos de almacenamiento (ranuras para tarjetas SD tal y puertos USB) que se utilizan en un StorageManagerService ejecución, fijar la VolumeInfo.MOUNT_FLAG_INDEXABLE bandera.

  • Cuando utilice una implementación de MTP personalizada (no AOSP), asegúrese de que la implementación se base únicamente en las API públicas y del sistema para permitir que la implementación interactúe con MediaStore.

Personalización

Ahora puede agregar nuevos formatos de medios, influir en los dispositivos de almacenamiento que se indexan y reemplazar la pila MTP.

  • Formatos de medios personalizados. Para cada nuevo formato de medio personalizado, debe proporcionar una asignación de la extensión de archivo única a un tipo MIME. Le recomendamos que seguir el proceso de registro IANA .

    • No puede redefinir una extensión o un tipo MIME que ya está definido en AOSP.

    • Para video/* y audio/* archivos, Mediaprovider sigue consultar MediaMetadataRetriever . Utilice los extractores multimedia de Android 10 para devolver metadatos para formatos personalizados.

    • Para image/* archivos, Mediaprovider continúa la estandarización de Exif para los metadatos. Se puede extender android.media.ExifInterface para extraer y volver Exif los metadatos de los formatos de imagen personalizado.

  • Indicador de indexación de dispositivos de almacenamiento. Índices Mediaprovider todos los volúmenes devueltos por StorageManager.getStorageVolumes() donde StorageVolume.getMediaStoreVolumeName() no es nulo. Puede personalizar la lista de volúmenes devueltos para influir en lo que se indexa, pero desaconsejamos incluir volúmenes transitorios (como unidades USB OTG).

  • Reemplazo de pila MTP. Android 11 coloca la pila MTP completamente fuera del límite del módulo y garantiza que funcione con las API públicas.

Pruebas

Puede verificar la funcionalidad de MediaProvider mediante las siguientes pruebas:

  • Para comprobar la funcionalidad de API públicas Mediastore, pruebas de uso en el CtsProviderTestCases paquete de la compatibilidad de Android Test Suite (CTS).

  • Para verificar la funcionalidad de los componentes internos Mediaprovider, utilizar las pruebas en MediaProviderTests .

Para ejecutar ambos conjuntos de pruebas juntas, utilice el siguiente atest comando:

atest --test-mapping packages/providers/MediaProvider