Modul MediaProvider mengoptimalkan metadata yang diindeks (audio, video, dan gambar dari kartu SD dan perangkat USB) dan 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 pengeditan metadata lokasi sensitif. Modul ini dapat diperbarui, memungkinkan Android untuk merespons masalah keamanan dengan lebih cepat (menjaga data sensitif pengguna tetap terlindungi) dan menambahkan format media baru lebih cepat (memberikan konsistensi bagi pengguna dan pengembang).
Perubahan di Android 10
Android 10 memperkenalkan beberapa peningkatan terkait dengan mengidentifikasi dan mengekstrak data dari file media, khususnya:
Menentukan tipe konten file menggunakan bagian pertama dari tipe MIME file. Misalnya, OS mengetahui bahwa
image/png
danimage/x-newly-invented-format
adalah gambar, dan dengan demikian dapat secara akurat menjelaskan izin yang relevan kepada pengguna akhir.Menentukan jenis MIME hanya menggunakan ekstensi file (dan tanpa menggunakan konten sniffing untuk menghindari masalah keamanan).
Menentukan jenis MIME dari file arbitrer menggunakan kombinasi pemetaan Debian Linux dan Android upstream .
Mengembalikan 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 penyempurnaan berikut:
Perbaikan pengindeksan. Modul MediaProvider sekarang mengindeks metadata dengan merekonsiliasi metadata yang tersedia dengan API publik MediaStore. Perubahan meliputi:
Kolom
is_favorite
baru dan argumenQUERY_ARG_MATCH_FAVORITE
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_TRASHED
untuk mengaktifkan aplikasi bergaya galeri untuk memfilter berdasarkan kolom ini.API baru yang memungkinkan modifikasi massal beberapa item dengan satu permintaan dialog pengguna, termasuk
createDeleteRequest()
,createFavoriteRequest()
,createTrashRequest()
, dancreateWriteRequest()
.Kolom
GENERATION_ADDED
danGENERATION_MODIFIED
baru untuk digunakan dalam mendeteksi perubahan yang telah terjadi sejak titik sinkronisasi sebelumnya dengan cepat dan andal.API publik
GROUP BY
baru untuk digunakan dengan kolom metadata tambahan yang tidak disebutkan di atas.
Peningkatan
ExifInterface
untuk mengekstrak metadata dari wadah PNG dan WebP.Perbaikan
SystemUI
untuk menulis metadataDateTimeOriginal
dalam tangkapan layar.
Selain itu, Anda kini dapat menyesuaikan MediaProvider dengan menambahkan format media baru, menandai perangkat penyimpanan mana yang harus diindeks, dan bahkan mengganti tumpukan MTP. Untuk detailnya, lihat Penyesuaian .
Batas modul
Android 11 memigrasikan semua kode dalam packages/providers/MediaProvider
ke lokasi baru, dengan pengecualian logika terkait MTP. Selain itu, frameworks/base/core/java/android/provider/MediaStore.java
sekarang berada di dalam batas modul di packages/providers/MediaProvider
.
Format paket
Modul MediaProvider dalam format APK-in-APEX.
Ketergantungan
Dependensi MediaProvider terkait dengan penyesuaian (yaitu, jika Anda menyesuaikan MediaProvider, Anda harus memastikan implementasi Anda memenuhi ketergantungan yang terkait dengan penyesuaian Anda).
Saat menggunakan format file media khusus atau tidak standar (misalnya, format yang dihasilkan oleh aplikasi Kamera khusus vendor), Anda harus mendaftarkan setiap format khusus dengan
MimeUtils
dan modul Media Extractor untuk mengaktifkan pengindeksan oleh MediaProvider.Untuk memastikan MediaProvider mengindeks kumpulan perangkat penyimpanan khusus (slot kartu SD dan port USB) yang digunakan dalam implementasi
StorageManagerService
, setel tandaVolumeInfo.MOUNT_FLAG_INDEXABLE
.Saat menggunakan implementasi MTP kustom (non-AOSP), pastikan implementasi hanya mengandalkan API publik dan sistem untuk memungkinkan implementasi berinteraksi dengan MediaStore.
Kustomisasi
Sekarang Anda dapat menambahkan format media baru, memengaruhi perangkat penyimpanan mana yang diindeks, dan mengganti tumpukan MTP.
Format media khusus. Untuk setiap format media kustom baru, Anda harus menyediakan pemetaan dari ekstensi file unik ke tipe MIME. Kami sangat menganjurkan Anda untuk mengikuti proses pendaftaran IANA .
Anda tidak dapat mendefinisikan ulang ekstensi atau tipe MIME yang sudah ditentukan di AOSP.
Untuk file
video/*
danaudio/*
, MediaProvider terus berkonsultasiMediaMetadataRetriever
. Gunakan Android 10 Media Extractors untuk mengembalikan metadata untuk format khusus.Untuk file
image/*
, MediaProvider melanjutkan standarisasi diExif
untuk metadata. Anda dapat memperluasandroid.media.ExifInterface
untuk mengekstrak dan mengembalikan metadataExif
untuk format gambar khusus apa pun.
Bendera pengindeksan perangkat penyimpanan. MediaProvider mengindeks semua volume yang dikembalikan oleh
StorageManager.getStorageVolumes()
denganStorageVolume.getMediaStoreVolumeName()
bukan nol. Anda dapat menyesuaikan daftar volume yang dikembalikan untuk memengaruhi apa yang diindeks, tetapi kami menyarankan untuk tidak menyertakan volume sementara (seperti drive USB OTG).Penggantian tumpukan MTP. Android 11 menempatkan tumpukan MTP sepenuhnya di luar batas modul dan memastikan bahwa itu bekerja melawan API publik.
Pengujian
Anda dapat memverifikasi fungsionalitas MediaProvider menggunakan tes berikut:
Untuk memverifikasi fungsionalitas API publik MediaStore, gunakan pengujian dalam paket
CtsProviderTestCases
dari Android Compatibility Test Suite (CTS).Untuk memverifikasi fungsionalitas internal MediaProvider, gunakan pengujian di
MediaProviderTests
.
Untuk menjalankan kedua rangkaian pengujian bersama-sama, gunakan perintah atest
berikut:
atest --test-mapping packages/providers/MediaProvider