Modul MediaProvider mengoptimalkan metadata yang diindeks (audio, video, dan gambar dari kartu SD dan perangkat USB) serta membuat data tersebut tersedia untuk aplikasi melalui API publik MediaStore. Untuk menjaga privasi pengguna, modul MediaProvider menerapkan model keamanan penyimpanan terbatas yang diperkenalkan di Android 10, yang mencakup menyamarkan metadata lokasi sensitif. Modul ini dapat diupdate, sehingga memungkinkan Android merespons masalah keamanan dengan lebih cepat (menjaga keamanan data pengguna yang sensitif) dan menambahkan format media baru dengan lebih cepat (memberikan konsistensi bagi pengguna dan developer).
Perubahan di Android 10
Android 10 memperkenalkan beberapa peningkatan terkait identifikasi dan ekstraksi data dari file media, khususnya:
- Menentukan jenis konten file menggunakan bagian pertama jenis MIME file. Misalnya, OS mengetahui bahwa - image/pngdan- image/x-newly-invented-formatadalah gambar, sehingga dapat secara akurat menjelaskan izin yang relevan kepada pengguna akhir.
- Menentukan jenis MIME hanya menggunakan ekstensi file (dan tanpa menggunakan penginderaan konten untuk menghindari masalah keamanan). 
- Menentukan jenis MIME file arbitrer menggunakan kombinasi pemetaan Debian Linux dan Android upstream. 
- Mengembalikan data yang relevan dari file - video/*dan- audio/*(melalui- MediaMetadataRetriever) dan file- image/*(melalui- ExifInterface).
Perubahan di Android 11
Di Android 11, modul MediaProvider dibangun berdasarkan perubahan yang dilakukan di Android 10 dengan peningkatan berikut:
- Peningkatan pada pengindeksan. Modul MediaProvider kini mengindeks metadata dengan mencocokkan metadata yang tersedia dengan API publik MediaStore. Perubahan mencakup: - Kolom - is_favoritedan argumen- QUERY_ARG_MATCH_FAVORITEbaru untuk memungkinkan aplikasi bergaya galeri memfilter media dengan cepat berdasarkan kolom ini.
- Mengindeks metadata ruang warna. 
- Kolom 'is_trashed' baru dan argumen - QUERY_ARG_MATCH_TRASHEDuntuk memungkinkan aplikasi bergaya galeri memfilter berdasarkan kolom ini.
- API baru yang memungkinkan modifikasi massal beberapa item dengan satu perintah dialog pengguna, termasuk - createDeleteRequest(),- createFavoriteRequest(),- createTrashRequest(), dan- createWriteRequest().
- Kolom - GENERATION_ADDEDdan- GENERATION_MODIFIEDbaru untuk digunakan dalam mendeteksi perubahan yang terjadi sejak titik sinkronisasi sebelumnya dengan cepat dan andal.
- API publik - GROUP BYbaru untuk digunakan dengan kolom metadata tambahan yang tidak disebutkan di atas.
 
- Peningkatan pada - ExifInterfaceuntuk mengekstrak metadata dari container PNG dan WebP.
- Peningkatan pada - SystemUIuntuk menulis metadata- DateTimeOriginaldalam screenshot.
Selain itu, Anda kini dapat menyesuaikan MediaProvider dengan menambahkan format media baru, menandai perangkat penyimpanan mana yang harus diindeks, dan bahkan mengganti stack MTP. Untuk mengetahui detailnya, lihat Penyesuaian.
Batas modul
Android 11 memigrasikan semua kode di
packages/providers/MediaProvider ke lokasi baru, dengan pengecualian penting
pada logika terkait MTP. Selain itu,
frameworks/base/core/java/android/provider/MediaStore.java kini di dalam
batas modul di packages/providers/MediaProvider.
Format paket
Modul MediaProvider dalam format APK-in-APEX.
Dependensi
Dependensi MediaProvider terkait dengan penyesuaian (yaitu, jika Anda menyesuaikan MediaProvider, Anda harus memastikan implementasi Anda memenuhi dependensi yang terkait dengan penyesuaian Anda).
- Saat menggunakan format file media kustom atau non-standar (misalnya, format yang dihasilkan oleh aplikasi Kamera khusus vendor), Anda harus mendaftarkan setiap format kustom dengan - MimeUtilsdan modul Media Extractor untuk mengaktifkan pengindeksan oleh MediaProvider.
- Untuk memastikan MediaProvider mengindeks serangkaian perangkat penyimpanan kustom (seperti slot kartu SD dan port USB) yang digunakan dalam penerapan - StorageManagerService, tetapkan tanda- VolumeInfo.MOUNT_FLAG_INDEXABLE.
- Saat menggunakan penerapan MTP kustom (non-AOSP), pastikan penerapan hanya mengandalkan API publik dan sistem agar penerapan dapat berinteraksi dengan MediaStore. 
Penyesuaian
Anda kini dapat menambahkan format media baru, memengaruhi perangkat penyimpanan mana yang diindeks, dan mengganti stack MTP.
- Format media kustom. Untuk setiap format media kustom baru, Anda harus menyediakan pemetaan dari ekstensi file unik ke jenis MIME. Sebaiknya Anda mengikuti proses pendaftaran IANA. - Anda tidak dapat mendefinisikan ulang ekstensi atau jenis MIME yang sudah ditentukan di AOSP. 
- Untuk file - video/*dan- audio/*, MediaProvider terus berkonsultasi dengan- MediaMetadataRetriever. Gunakan Pengekstrak Media Android 10 untuk menampilkan metadata untuk format kustom.
- Untuk file - image/*, MediaProvider terus menstandardisasi- Exifuntuk metadata. Anda dapat memperluas- android.media.ExifInterfaceuntuk mengekstrak dan menampilkan metadata- Exifuntuk format gambar kustom apa pun.
 
- Flag pengindeksan perangkat penyimpanan. MediaProvider mengindeks semua volume yang ditampilkan oleh - StorageManager.getStorageVolumes()dengan- StorageVolume.getMediaStoreVolumeName()tidak null. Anda dapat menyesuaikan daftar volume yang ditampilkan untuk memengaruhi apa yang diindeks, tetapi sebaiknya jangan menyertakan volume sementara (seperti drive USB OTG).
- Penggantian stack MTP. Android 11 menempatkan stack MTP sepenuhnya di luar batas modul dan memastikan bahwa stack tersebut berfungsi terhadap API publik. 
Pengujian
Anda dapat memverifikasi fungsi MediaProvider menggunakan pengujian berikut:
- Untuk memverifikasi fungsi API publik MediaStore, gunakan pengujian dalam paket - CtsProviderTestCasesAndroid Compatibility Test Suite (CTS).
- Untuk memverifikasi fungsi internal MediaProvider, gunakan pengujian di - MediaProviderTests.
Untuk menjalankan kedua set pengujian secara bersamaan, gunakan perintah atest berikut:
atest --test-mapping packages/providers/MediaProvider