Modul MediaProvider mengoptimalkan metadata yang diindeks (audio, video, dan gambar dari kartu SD dan perangkat USB) dan membuat data tersebut tersedia untuk aplikasi melalui MediaStore publik Google Cloud API. Untuk menjaga privasi pengguna, modul MediaProvider menerapkan penyimpanan terbatas keamanan model yang diperkenalkan di Android 10, yang mencakup menyamarkan metadata lokasi sensitif. Modul ini dapat diperbarui, sehingga Android dapat merespons masalah keamanan dengan lebih cepat (menjaga perlindungan 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 dengan identifikasi dan ekstraksi data dari file media, khususnya:
Menentukan jenis konten file menggunakan bagian pertama jenis MIME file. Misalnya, OS tahu bahwa
image/png
danimage/x-newly-invented-format
adalah gambar, sehingga dapat mendeskripsikan secara akurat izin akses yang relevan kepada pengguna akhir.Menentukan tipe MIME hanya dengan menggunakan ekstensi file (dan tanpa menggunakan penyadapan konten untuk menghindari masalah keamanan).
Menentukan jenis MIME dari file arbitrer menggunakan kombinasi Debian Linux dan Android upstream pemetaan.
Menampilkan data yang relevan dari file
video/*
danaudio/*
(melaluiMediaMetadataRetriever
) dan fileimage/*
(melaluiExifInterface
).
Perubahan di Android 11
Di Android 11, modul MediaProvider dibuat berdasarkan perubahan yang dibuat di Android 10 dengan peningkatan berikut:
Peningkatan pada pengindeksan. Modul MediaProvider sekarang mengindeks metadata dengan merekonsiliasi metadata yang tersedia dengan API publik MediaStore. Perubahan termasuk:
Kolom
is_favorite
dan argumenQUERY_ARG_MATCH_FAVORITE
baru untuk diaktifkan aplikasi bergaya galeri untuk memfilter media dengan cepat berdasarkan kolom ini.Mengindeks metadata ruang warna.
'is_trashed' baru kolom dan argumen
QUERY_ARG_MATCH_TRASHED
untuk mengaktifkan aplikasi bergaya galeri untuk memfilter berdasarkan kolom ini.API baru yang memungkinkan modifikasi massal beberapa item dengan satu pengguna prompt dialog, termasuk
createDeleteRequest()
,createFavoriteRequest()
,createTrashRequest()
, dancreateWriteRequest()
.Kolom
GENERATION_ADDED
danGENERATION_MODIFIED
baru untuk digunakan dengan cepat dan mendeteksi perubahan yang telah terjadi sejak titik sinkronisasi.API publik
GROUP BY
baru untuk digunakan dengan kolom metadata tambahan yang tidak yang disebutkan di atas.
Peningkatan pada
ExifInterface
untuk mengekstrak metadata dari PNG dan WebP container.Peningkatan pada
SystemUI
untuk menulis metadataDateTimeOriginal
di layar yang dihasilkan.
Selain itu, Anda sekarang dapat menyesuaikan MediaProvider dengan menambahkan format media baru, menandai perangkat penyimpanan mana yang harus diindeks, dan bahkan mengganti MTP {i>stack<i}. Untuk mengetahui detailnya, lihat Penyesuaian.
Batas modul
Android 11 memigrasikan semua kode di
packages/providers/MediaProvider
ke lokasi baru, dengan pengecualian penting
logika terkait MTP. Selain itu,
frameworks/base/core/java/android/provider/MediaStore.java
sekarang berada di dalam
batas modul pada packages/providers/MediaProvider
.
Format paket
Modul MediaProvider memiliki format APK-in-APEX.
Dependensi
Dependensi MediaProvider terkait dengan penyesuaian (yang jika menyesuaikan MediaProvider, Anda harus memastikan dependensi yang terkait dengan penyesuaian Anda).
Saat menggunakan format file media kustom atau non-standar (misalnya, yang dihasilkan oleh aplikasi Kamera khusus vendor), Anda harus mendaftarkan setiap dengan
MimeUtils
dan modul Ekstraktor Media untuk mengaktifkan pengindeksan dengan MediaProvider.Untuk memastikan MediaProvider mengindeks kumpulan perangkat penyimpanan kustom (seperti kartu SD slot dan port USB) yang digunakan dalam implementasi
StorageManagerService
, setel atribut tandaVolumeInfo.MOUNT_FLAG_INDEXABLE
.Saat menggunakan implementasi MTP kustom (non-AOSP), pastikan implementasinya hanya mengandalkan API publik dan sistem untuk memungkinkan implementasi berinteraksi dengan MediaStore.
Penyesuaian
Anda sekarang dapat menambahkan format media baru, memengaruhi perangkat penyimpanan mana yang diindeks, dan mengganti tumpukan MTP.
Format media kustom. Untuk setiap format media kustom baru, Anda harus menyediakan pemetaan dari ekstensi file unik ke jenis MIME. Kami sangat menganjurkan Anda untuk mengikuti pendaftaran IANA {i>checkout<i}.
Anda tidak dapat menentukan ulang ekstensi atau jenis MIME yang sudah didefinisikan dalam AOSP.
Untuk file
video/*
danaudio/*
, MediaProvider terus berkonsultasiMediaMetadataRetriever
. Gunakan Ekstraktor Media Android 10 untuk menampilkan metadata untuk format kustom.Untuk
image/*
file, MediaProvider terus menstandarkan diExif
untuk {i>metadata<i}. Anda dapat memperluasandroid.media.ExifInterface
untuk mengekstrak dan menampilkan MetadataExif
untuk semua format gambar kustom.
Flag pengindeksan perangkat penyimpanan. MediaProvider mengindeks semua volume yang ditampilkan paling lambat
StorageManager.getStorageVolumes()
di manaStorageVolume.getMediaStoreVolumeName()
bukan null. Anda dapat menyesuaikan daftar volume yang dikembalikan untuk memengaruhi indeks, tetapi sebaiknya jangan termasuk volume sementara (seperti drive OTG USB).Penggantian stack MTP. Android 11 menempatkan MTP menumpuk sepenuhnya di luar batas modul dan memastikan bahwa ia bekerja pada API publik.
Pengujian
Anda dapat memverifikasi fungsi MediaProvider menggunakan pengujian berikut:
Untuk memverifikasi fungsi API publik MediaStore, gunakan pengujian di
CtsProviderTestCases
dari Compatibility Test Suite (CTS) Android.Untuk memverifikasi fungsi internal MediaProvider, gunakan pengujian di
MediaProviderTests
.
Untuk menjalankan kedua kumpulan pengujian secara bersamaan, gunakan perintah atest
berikut:
atest --test-mapping packages/providers/MediaProvider