Module MediaProvider

Le module MediaProvider optimise les métadonnées indexées (audio, vidéo et images) des cartes SD et des périphériques USB) et met ces données à la disposition des applications via l'application MediaStore public API. Pour préserver la confidentialité des utilisateurs, le module MediaProvider applique l'espace de stockage cloisonné sécurité modèle introduite dans Android 10, qui inclut le masquage des métadonnées de localisation sensibles. Ce module peut être mis à jour, ce qui permet à Android de répondre plus rapidement aux problèmes de sécurité (en protégeant les données utilisateur sensibles) et d'ajouter plus rapidement de nouveaux formats multimédias. (en veillant à la cohérence des utilisateurs et des développeurs).

Modifications apportées à Android 10

Android 10 a introduit plusieurs améliorations liées à l'identification et à l'extraction à partir de fichiers multimédias, notamment:

  • Déterminer le type de contenu d'un fichier à l'aide de la première partie du type MIME d'un fichier. Par exemple, le système d'exploitation sait que image/png et image/x-newly-invented-format sont des images et peuvent donc décrire avec précision les autorisations pertinentes à l'utilisateur final.

  • Déterminer le type MIME en utilisant uniquement l'extension de fichier (et sans utiliser reniflage de contenu pour éviter les problèmes de sécurité).

  • Déterminer le type MIME d'un fichier arbitraire en utilisant une combinaison des Debian Linux et Android en amont de mise en correspondance.

  • Affichage des données pertinentes à partir des fichiers video/* et audio/* (via MediaMetadataRetriever) et image/* (via ExifInterface).

Modifications apportées à Android 11

Dans Android 11, le module MediaProvider s'appuie sur modifications apportées dans Android 10, avec les améliorations suivantes:

  • Améliorations de l'indexation. Le module MediaProvider indexe désormais les métadonnées par rapprocher les métadonnées disponibles et les API publiques MediaStore. Modifications incluent:

    • Nouvelle colonne is_favorite et argument QUERY_ARG_MATCH_FAVORITE à activer des applications de style galerie pour filtrer rapidement les contenus multimédias en fonction de cette colonne.

    • Indexation des métadonnées de l'espace colorimétrique.

    • Nouvel élément "is_trashed" colonne et argument QUERY_ARG_MATCH_TRASHED pour activer applications de style galerie pour filtrer en fonction de cette colonne.

    • Nouvelles API permettant la modification groupée de plusieurs articles avec un seul utilisateur invite de la boîte de dialogue, y compris createDeleteRequest(), createFavoriteRequest(), createTrashRequest() et createWriteRequest().

    • Nouvelles colonnes GENERATION_ADDED et GENERATION_MODIFIED pour une utilisation rapide et de détecter de manière fiable les modifications qui se sont produites depuis point de synchronisation.

    • Nouvelle API publique GROUP BY à utiliser avec des colonnes de métadonnées supplémentaires non mentionnées ci-dessus.

  • Amélioration de ExifInterface pour extraire les métadonnées à partir des fichiers PNG et WebP conteneurs.

  • Améliorations apportées à SystemUI pour l'écriture des métadonnées DateTimeOriginal à l'écran des captures d'écran.

De plus, vous pouvez désormais personnaliser MediaProvider en ajoutant de nouveaux formats multimédias, indiquant quels périphériques de stockage doivent être indexés, et même remplacer le MTP pile. Pour en savoir plus, consultez Personnalisation.

Limite du module

Android 11 migre tout le code packages/providers/MediaProvider à un nouvel établissement, à l'exception notable de la logique liée à MTP. De plus, frameworks/base/core/java/android/provider/MediaStore.java se trouve désormais dans le limite du module à packages/providers/MediaProvider.

Format du package

Le module MediaProvider est au format APK-in-APEX.

Dépendances

Les dépendances MediaProvider sont liées aux personnalisations (qui si vous personnalisez MediaProvider, vous devez vous assurer que votre implémentation respecte la dépendance associée à votre personnalisation).

  • Lorsque vous utilisez des formats de fichiers multimédias personnalisés ou non standards (par exemple, un format généré par une application Appareil photo spécifique à un fournisseur), vous devez enregistrer chaque enregistrement personnalisé avec MimeUtils et le module Media Extractor pour activer l'indexation MediaProvider

  • Pour s'assurer que MediaProvider indexe un ensemble personnalisé de périphériques de stockage emplacements et ports USB) utilisés dans une implémentation StorageManagerService, définissez le paramètre VolumeInfo.MOUNT_FLAG_INDEXABLE.

  • Lorsque vous utilisez une implémentation MTP personnalisée (non AOSP), assurez-vous que l'implémentation s'appuie uniquement sur des API publiques et système pour permettre l'implémentation interagissent avec MediaStore.

Personnalisation

Vous pouvez désormais ajouter de nouveaux formats multimédias, influer sur les périphériques de stockage indexés et remplacer la pile MTP.

  • Formats multimédias personnalisés. Pour chaque nouveau format de média personnalisé, vous devez fournir un le mappage de l'extension de fichier unique à un type MIME. Nous vous recommandons vivement suivez les consignes d'enregistrement de l'IANA processus.

    • Vous ne pouvez pas redéfinir une extension ou un type MIME déjà définis dans AOSP.

    • Pour les fichiers video/* et audio/*, MediaProvider poursuit la consultation MediaMetadataRetriever Utilisez les extracteurs multimédias Android 10 pour renvoyer pour les formats personnalisés.

    • Pour les fichiers image/*, MediaProvider poursuit la normalisation sur Exif pour de métadonnées. Vous pouvez étendre android.media.ExifInterface pour extraire et renvoyer Métadonnées Exif pour tous les formats d'image personnalisés.

  • Indicateur d'indexation des périphériques de stockage. MediaProvider indexe tous les volumes renvoyés par StorageManager.getStorageVolumes()StorageVolume.getMediaStoreVolumeName() n'est pas nul. Vous pouvez personnaliser liste des volumes renvoyés pour influer sur ce qui est indexé, mais nous vous déconseillons y compris les volumes temporaires (comme les clés USB OTG).

  • Remplacement de la pile MTP Android 11 place le MTP entièrement en dehors de la limite du module et s'assure qu'il fonctionne aux API publiques.

Tests

Vous pouvez vérifier le fonctionnement de MediaProvider à l'aide des tests suivants:

  • Pour vérifier le fonctionnement des API publiques MediaStore, utilisez des tests dans le Package CtsProviderTestCases de la suite de tests de compatibilité Android (CTS).

  • Pour vérifier le fonctionnement des composants internes de MediaProvider, utilisez des tests dans MediaProviderTests

Pour exécuter les deux ensembles de tests en même temps, utilisez la commande atest suivante:

atest --test-mapping packages/providers/MediaProvider