Modulo MediaProvider

Il modulo MediaProvider ottimizza i metadati indicizzati (audio, video e immagini) da schede SD e dispositivi USB) e rende disponibili i dati alle app tramite MediaStore pubblico per le API. Per preservare la privacy degli utenti, il modulo MediaProvider applica l'archiviazione con ambito sicurezza modello È stata introdotta in Android 10, il che include l'oscuramento dei metadati sulla posizione sensibili. Questo modulo è aggiornabile, consentendo ad Android di rispondere più velocemente ai problemi di sicurezza (mantenendo protetti i dati utente sensibili) e aggiungi nuovi formati multimediali più velocemente (garantendo coerenza sia a utenti che agli sviluppatori).

Modifiche in Android 10

Android 10 ha introdotto diversi miglioramenti relativi all'identificazione ed estrazione provenienti da file multimediali, in particolare:

  • Determinazione del tipo di contenuti del file utilizzando la prima parte del tipo MIME di file. Ad esempio, il sistema operativo sa che image/png e image/x-newly-invented-format sono immagini e sono quindi in grado di descrivere con precisione le autorizzazioni pertinenti per l'utente finale.

  • Determinazione del tipo MIME utilizzando solo l'estensione del file (e senza utilizzare sniffing dei contenuti per evitare problemi di sicurezza).

  • Determinare il tipo MIME di un file arbitrario utilizzando una combinazione di Debian Linux e Android upstream mapping.

  • Restituzione di dati pertinenti da file video/* e audio/* (tramite MediaMetadataRetriever) e image/* file (tramite ExifInterface).

Modifiche in Android 11

In Android 11, il modulo MediaProvider si basa sul modifiche apportate in Android 10 con i seguenti miglioramenti:

  • Miglioramenti all'indicizzazione. Il modulo MediaProvider ora indicizza i metadati tramite riconciliando i metadati disponibili con le API pubbliche MediaStore. Modifiche include:

    • Nuova colonna is_favorite e nuovo argomento QUERY_ARG_MATCH_FAVORITE da abilitare app in stile galleria per filtrare rapidamente i contenuti multimediali in base a questa colonna.

    • Indicizzazione dei metadati dello spazio colore.

    • Nuovo elemento "is_trash" colonna e QUERY_ARG_MATCH_TRASHED argomento da abilitare app in stile galleria da filtrare in base a questa colonna.

    • Nuove API che consentono la modifica collettiva di più elementi con un singolo utente finestra di dialogo, incluse createDeleteRequest(), createFavoriteRequest(), createTrashRequest() e createWriteRequest().

    • Nuove colonne GENERATION_ADDED e GENERATION_MODIFIED da utilizzare rapidamente e rilevare in modo affidabile le modifiche avvenute in passato punto di sincronizzazione.

    • Nuova API pubblica GROUP BY da utilizzare con colonne di metadati aggiuntive non di cui sopra.

  • Miglioramento a ExifInterface per estrarre metadati da PNG e WebP containerizzati.

  • Miglioramenti a SystemUI per la scrittura di metadati DateTimeOriginal sullo schermo acquisizioni.

Inoltre, ora puoi personalizzare MediaProvider aggiungendo nuovi formati multimediali, contrassegnare i dispositivi di archiviazione da indicizzare e persino sostituire MTP stack. Per maggiori dettagli, vedi Personalizzazione.

Confine modulo

Android 11 esegue la migrazione di tutto il codice packages/providers/MediaProvider per una nuova località, con una notevole eccezione della logica relativa a MTP. Inoltre, frameworks/base/core/java/android/provider/MediaStore.java ora si trova all'interno della limite del modulo in packages/providers/MediaProvider.

Formato del pacchetto

Il modulo MediaProvider è in formato APK-in-APEX.

Dipendenze

Le dipendenze di MediaProvider sono correlate alle personalizzazioni (ovvero è che, se personalizzi MediaProvider, devi assicurarti che l'implementazione soddisfi la dipendenza associata alla personalizzazione).

  • Quando utilizzi formati file multimediali personalizzati o non standard (ad esempio, un formato generati da un'app Fotocamera specifica del fornitore), devi registrare ogni con MimeUtils e il modulo Media Extractor per abilitare l'indicizzazione MediaProvider:

  • Per fare in modo che MediaProvider indicizzi un insieme personalizzato di dispositivi di archiviazione (ad esempio, schede SD) slot e porte USB) usati in un'implementazione StorageManagerService, imposta il valore Flag VolumeInfo.MOUNT_FLAG_INDEXABLE.

  • Quando utilizzi un'implementazione MTP personalizzata (non AOSP), assicurati che l'implementazione si basa esclusivamente su API pubbliche e di sistema per consentire l'implementazione interagire con MediaStore.

Personalizzazione

Ora puoi aggiungere nuovi formati multimediali, influire sui dispositivi di archiviazione indicizzati, e sostituisco lo stack MTP.

  • Formati multimediali personalizzati. Per ogni nuovo formato multimediale personalizzato, devi fornire una il mapping dall'estensione del file univoca a un tipo MIME. Ti consigliamo vivamente di di seguire le istruzioni della registrazione IANA .

    • Non puoi ridefinire un'estensione o un tipo MIME già definito in AOSP.

    • Per i file video/* e audio/*, MediaProvider continua a fornire consulenza MediaMetadataRetriever. Utilizza gli estrattori di contenuti multimediali di Android 10 per restituire metadati per formati personalizzati.

    • Per i file image/*, MediaProvider continua a standardizzare su Exif per metadati. Puoi estendere android.media.ExifInterface per estrarre e restituire Exif metadati per qualsiasi formato di immagine personalizzato.

  • Flag di indicizzazione dei dispositivi di archiviazione. MediaProvider indicizza tutti i volumi restituiti di StorageManager.getStorageVolumes() dove StorageVolume.getMediaStoreVolumeName() non è null. Puoi personalizzare di volumi restituiti per influenzare ciò che viene indicizzato, ma sconsigliamo di inclusi i volumi temporanei (come le unità OTG USB).

  • Sostituzione dello stack MTP. Android 11 pone l'MTP completamente al di fuori del confine del modulo e ne assicura il funzionamento rispetto a le API pubbliche.

Test

Puoi verificare la funzionalità di MediaProvider utilizzando i seguenti test:

  • Per verificare la funzionalità delle API pubbliche MediaStore, utilizza i test nella CtsProviderTestCases del pacchetto Android Compatibility Test Suite (CTS).

  • Per verificare la funzionalità dei componenti interni di MediaProvider, utilizza i test in MediaProviderTests.

Per eseguire entrambi i set di test insieme, utilizza il seguente comando atest:

atest --test-mapping packages/providers/MediaProvider