Modulo MediaProvider

Il modulo Mediaprovider ottimizza metadati indicizzato (audio, video e immagini da schede SD e dispositivi USB) e rende che i dati disponibili per applicazioni attraverso le API pubbliche MediaStore . Per mantenere la privacy degli utenti, il modulo Mediaprovider impone il modello di sicurezza di stoccaggio ambito introdotto in Android 10, che comprende fornendoci posizione sensibile metadati. Questo modulo è aggiornabile, consentendo ad Android di rispondere più rapidamente ai problemi di sicurezza (mantenendo protetti i dati sensibili dell'utente) e di aggiungere nuovi formati multimediali più rapidamente (fornendo coerenza sia agli utenti che agli sviluppatori).

Modifiche in Android 10

Android 10 ha introdotto diversi miglioramenti relativi all'identificazione e all'estrazione dei dati dai file multimediali, in particolare:

  • Determinazione del tipo di contenuto del file utilizzando la prima parte del tipo MIME di un file. Ad esempio, il sistema operativo sa che sia image/png e image/x-newly-invented-format sono immagini, e possono quindi descrivere accuratamente autorizzazioni rilevanti per l'utente finale.

  • Determinare il tipo MIME utilizzando solo l'estensione del file (e senza l'utilizzo di contenuti sniffing per evitare problemi di sicurezza).

  • Determinare il tipo MIME di un file arbitrario usando una combinazione di monte mappature Debian Linux e Android .

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

Modifiche ad Android 11

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

  • Miglioramenti all'indicizzazione. Il modulo MediaProvider ora indicizza i metadati riconciliando i metadati disponibili con le API pubbliche di MediaStore. Le modifiche includono:

    • Nuovo is_favorite colonna e QUERY_ARG_MATCH_FAVORITE argomento per abilitare le applicazioni galleria-stile per rapidamente materiali filtranti in base a questa colonna.

    • Indicizzazione dei metadati dello spazio colore.

    • Nuovo 'is_trashed' colonna e QUERY_ARG_MATCH_TRASHED argomento per abilitare le applicazioni galleria-stile al filtro sulla base di questa colonna.

    • Nuove API che consentono bulk modifica di oggetti multipli con un singolo utente di dialogo che richiedono, tra createDeleteRequest() , createFavoriteRequest() , createTrashRequest() , e createWriteRequest() .

    • Nuovo GENERATION_ADDED e GENERATION_MODIFIED colonne per uso nel rilevare in modo rapido e affidabile modifiche apportate dopo un punto di sincronizzazione precedente.

    • Nuovo GROUP BY API pubblica per l'utilizzo con ulteriori colonne di metadati non menzionati sopra.

  • Improvement allo ExifInterface per estrarre i metadati dai contenitori PNG e WebP.

  • Miglioramenti al SystemUI a scrivere DateTimeOriginal metadati in screenshot.

Inoltre, ora puoi personalizzare MediaProvider aggiungendo nuovi formati multimediali, contrassegnando quali dispositivi di archiviazione devono essere indicizzati e persino sostituendo lo stack MTP. Per dettagli, vedere Personalizzazione .

Confine del modulo

Android 11 migra tutto il codice in packages/providers/MediaProvider in una nuova posizione, con la notevole eccezione della logica MTP-correlato. Inoltre, frameworks/base/core/java/android/provider/MediaStore.java è ora all'interno del confine modulo a packages/providers/MediaProvider .

Formato del pacchetto

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

Dipendenze

Dipendenze Mediaprovider sono legati a personalizzazioni (che è, se si personalizza Mediaprovider, è necessario assicurarsi l'implementazione incontra la dipendenza associati con la personalizzazione).

  • Quando si utilizzano formati di file multimediali non standard o personalizzati (per esempio, un formato generato da un fornitore specifico Camera app), è necessario registrare ogni formato personalizzato con MimeUtils e il modulo media estrattore per consentire l'indicizzazione da Mediaprovider.

  • Per assicurare indici Mediaprovider un set personalizzato di dispositivi di memorizzazione (slot per schede come SD e porte USB) utilizzati in uno StorageManagerService attuazione, impostare il VolumeInfo.MOUNT_FLAG_INDEXABLE bandiera.

  • Quando si utilizza un'implementazione MTP personalizzata (non AOSP), assicurarsi che l'implementazione si basi esclusivamente sulle API pubbliche e di sistema per consentire all'implementazione di interagire con MediaStore.

personalizzazione

Ora puoi aggiungere nuovi formati multimediali, influenzare i dispositivi di archiviazione indicizzati e sostituire lo stack MTP.

  • Formati multimediali personalizzati. Per ogni nuovo formato multimediale personalizzato, è necessario fornire una mappatura dall'estensione file univoca a un tipo MIME. Raccomandiamo vivamente di seguire il processo di registrazione IANA .

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

    • Per video/* e audio/* file, Mediaprovider continua consulenza MediaMetadataRetriever . Usa Android 10 Media Extractor per restituire i metadati per i formati personalizzati.

    • Per image/* file, Mediaprovider continua standardizzazione su Exif per i metadati. È possibile estendere android.media.ExifInterface per estrarre e restituire Exif metadati per tutti i formati di immagine personalizzato.

  • Flag di indicizzazione dei dispositivi di archiviazione. Indici Mediaprovider tutti i volumi restituiti da StorageManager.getStorageVolumes() dove StorageVolume.getMediaStoreVolumeName() non è nullo. È possibile personalizzare l'elenco dei volumi restituiti per influenzare ciò che viene indicizzato, ma sconsigliamo di includere volumi transitori (come le unità USB OTG).

  • Sostituzione dello stack MTP. Android 11 posiziona lo stack MTP completamente al di fuori del confine del modulo e garantisce che funzioni con le API pubbliche.

test

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

  • Per verificare la funzionalità del MediaStore API pubbliche, i test di utilizzo nel CtsProviderTestCases pacchetto di Android Compatibility Test Suite (CTS).

  • Per verificare la funzionalità dei meccanismi interni Mediaprovider, utilizzare i test in MediaProviderTests .

Per eseguire entrambe le serie di prove insieme, utilizzare il seguente atest comando:

atest --test-mapping packages/providers/MediaProvider