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 penyuntingan metadata lokasi sensitif. Modul ini dapat diperbarui, memungkinkan Android merespons masalah keamanan dengan lebih cepat (menjaga data sensitif pengguna tetap terlindungi) dan menambahkan format media baru dengan lebih cepat (memberikan konsistensi bagi pengguna dan pengembang).
Perubahan di Android 10
Android 10 memperkenalkan beberapa peningkatan terkait identifikasi dan ekstraksi data dari file media, khususnya:
Menentukan tipe konten file menggunakan bagian pertama 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 tipe MIME hanya menggunakan ekstensi file (dan tanpa menggunakan sniffing konten untuk menghindari masalah keamanan).
Menentukan tipe MIME dari file arbitrer menggunakan kombinasi pemetaan Debian Linux upstream dan Android .
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 peningkatan berikut:
Perbaikan pengindeksan. Modul MediaProvider sekarang mengindeks metadata dengan merekonsiliasi metadata yang tersedia dengan API publik MediaStore. Perubahannya meliputi:
Kolom
is_favorite
baru dan argumenQUERY_ARG_MATCH_FAVORITE
untuk mengaktifkan aplikasi bergaya galeri memfilter media dengan cepat berdasarkan kolom ini.Mengindeks metadata ruang warna.
Kolom 'is_trashed' dan argumen
QUERY_ARG_MATCH_TRASHED
baru untuk mengaktifkan aplikasi bergaya galeri untuk memfilter berdasarkan kolom ini.API baru yang memungkinkan modifikasi massal beberapa item dengan satu perintah dialog pengguna, termasuk
createDeleteRequest()
,createFavoriteRequest()
,createTrashRequest()
, dancreateWriteRequest()
.Kolom
GENERATION_ADDED
danGENERATION_MODIFIED
baru untuk digunakan dalam mendeteksi perubahan yang 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 pada
ExifInterface
untuk mengekstrak metadata dari kontainer PNG dan WebP.Perbaikan pada
SystemUI
untuk menulis metadataDateTimeOriginal
dalam tangkapan layar.
Selain itu, kini Anda dapat menyesuaikan MediaProvider dengan menambahkan format media baru, menandai perangkat penyimpanan mana yang harus diindeks, dan bahkan mengganti tumpukan MTP. Untuk detailnya, lihat Kustomisasi .
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
kini berada di dalam batas modul di packages/providers/MediaProvider
.
Format paket
Modul MediaProvider dalam format APK-in-APEX.
Ketergantungan
Ketergantungan MediaProvider berkaitan 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 nonstandar (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 (seperti slot kartu SD dan port USB) yang digunakan dalam implementasi
StorageManagerService
, atur 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
Anda kini 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 berkonsultasi denganMediaMetadataRetriever
. Gunakan Android 10 Media Extractors untuk mengembalikan metadata untuk format khusus.Untuk file
image/*
, MediaProvider terus melakukan standarisasi padaExif
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, namun 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 tumpukan tersebut berfungsi pada API publik.
Pengujian
Anda dapat memverifikasi fungsionalitas MediaProvider menggunakan tes berikut:
Untuk memverifikasi fungsi 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 secara bersamaan, gunakan perintah atest
berikut:
atest --test-mapping packages/providers/MediaProvider