Mulai 27 Maret 2025, sebaiknya gunakan android-latest-release
, bukan aosp-main
, untuk mem-build dan berkontribusi pada AOSP. Untuk mengetahui informasi selengkapnya, lihat Perubahan pada AOSP.
Modul MediaProvider
Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
Modul MediaProvider mengoptimalkan metadata yang diindeks (audio, video, dan gambar
dari kartu SD dan perangkat USB) serta menyediakan data tersebut untuk aplikasi melalui
API publik
MediaStore.
Untuk menjaga privasi pengguna, modul MediaProvider menerapkan model keamanan
penyimpanan
terbatas
yang diperkenalkan di Android 10, yang mencakup penyamaran metadata lokasi sensitif.
Modul ini dapat diupdate, sehingga Android dapat merespons masalah keamanan dengan lebih cepat
(menjaga data pengguna sensitif tetap terlindungi) dan menambahkan format media baru dengan lebih cepat
(memberikan konsistensi kepada 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/png
dan
image/x-newly-invented-format
adalah gambar, sehingga dapat menjelaskan
izin yang relevan secara akurat kepada pengguna akhir.
Menentukan jenis MIME hanya menggunakan ekstensi file (dan tanpa menggunakan
content sniffing
untuk menghindari masalah keamanan).
Menentukan jenis MIME file arbitrer menggunakan kombinasi
pemetaan Android dan Debian Linux
upstream.
Menampilkan data yang relevan dari file video/*
dan audio/*
(melalui
MediaMetadataRetriever
) dan file image/*
(melalui ExifInterface
).
Perubahan di Android 11
Di Android 11, modul MediaProvider dibuat berdasarkan
perubahan yang dilakukan di Android 10 dengan peningkatan berikut:
Peningkatan pada pengindeksan. Modul MediaProvider kini mengindeks metadata dengan
menyelesaikan metadata yang tersedia dengan API publik MediaStore. Perubahan
meliputi:
Kolom is_favorite
dan argumen QUERY_ARG_MATCH_FAVORITE
baru 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 agar dapat 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_ADDED
dan GENERATION_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 pada ExifInterface
untuk mengekstrak metadata dari penampung PNG dan WebP.
Peningkatan pada SystemUI
untuk menulis metadata DateTimeOriginal
dalam screenshot.
Selain itu, kini Anda dapat menyesuaikan MediaProvider dengan menambahkan format media baru,
menandai perangkat penyimpanan 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
logika terkait MTP. Selain itu,
frameworks/base/core/java/android/provider/MediaStore.java
kini di dalam
batas modul di packages/providers/MediaProvider
.
Modul MediaProvider dalam format APK-in-APEX.
Dependensi
Dependensi MediaProvider terkait dengan penyesuaian (yaitu, jika Anda menyesuaikan MediaProvider, Anda harus memastikan implementasinya memenuhi
dependensi yang terkait dengan penyesuaian Anda).
Saat menggunakan format file media kustom atau nonstandar (misalnya, format
yang dihasilkan oleh aplikasi Kamera khusus vendor), Anda harus mendaftarkan setiap format
kustom dengan MimeUtils
dan modul Media Extractor untuk mengaktifkan pengindeksan oleh
MediaProvider.
Untuk memastikan MediaProvider mengindeks kumpulan perangkat penyimpanan kustom (seperti slot kartu
SD dan port USB) yang digunakan dalam implementasi StorageManagerService
, tetapkan
tanda VolumeInfo.MOUNT_FLAG_INDEXABLE
.
Saat menggunakan penerapan MTP kustom (non-AOSP), pastikan penerapan
hanya mengandalkan API publik dan sistem untuk memungkinkan penerapan
berinteraksi dengan MediaStore.
Penyesuaian
Anda kini dapat menambahkan format media baru, memengaruhi perangkat penyimpanan yang diindeks,
dan mengganti stack MTP.
Format media kustom. Untuk setiap format media kustom baru, Anda harus memberikan pemetaan dari ekstensi file unik ke jenis MIME. Sebaiknya Anda mengikuti proses pendaftaran IANA.
Anda tidak dapat menentukan ulang ekstensi atau jenis MIME yang sudah ditentukan di AOSP.
Untuk file video/*
dan audio/*
, MediaProvider terus berkonsultasi
dengan MediaMetadataRetriever
. Gunakan Ekstraktor Media Android 10 untuk menampilkan
metadata untuk format kustom.
Untuk file image/*
, MediaProvider terus melakukan standarisasi pada Exif
untuk
metadata. Anda dapat memperluas android.media.ExifInterface
untuk mengekstrak dan menampilkan
metadata Exif
untuk format gambar kustom apa pun.
Flag pengindeksan perangkat penyimpanan. MediaProvider mengindeks semua volume yang ditampilkan
oleh StorageManager.getStorageVolumes()
dengan
StorageVolume.getMediaStoreVolumeName()
bukan 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 dengan
API publik.
Pengujian
Anda dapat memverifikasi fungsi MediaProvider menggunakan pengujian berikut:
Untuk memverifikasi fungsi API publik MediaStore, gunakan pengujian dalam
paket CtsProviderTestCases
dari Android Compatibility Test Suite (CTS).
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
Konten dan contoh kode di halaman ini tunduk kepada lisensi yang dijelaskan dalam Lisensi Konten. Java dan OpenJDK adalah merek dagang atau merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2025-07-27 UTC.
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Informasi yang saya butuhkan tidak ada","missingTheInformationINeed","thumb-down"],["Terlalu rumit/langkahnya terlalu banyak","tooComplicatedTooManySteps","thumb-down"],["Sudah usang","outOfDate","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Masalah kode / contoh","samplesCodeIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 2025-07-27 UTC."],[],[],null,["# MediaProvider module\n\nThe MediaProvider module optimizes indexed metadata (audio, video, and images\nfrom SD cards and USB devices) and makes that data available to apps through the\n[MediaStore public\nAPIs](https://developer.android.com/reference/android/provider/MediaStore).\nTo maintain user privacy, the MediaProvider module enforces the [scoped storage\nsecurity\nmodel](https://developer.android.com/training/data-storage/files/external-scoped)\nintroduced in Android 10, which includes redacting sensitive location metadata.\nThis module is updatable, enabling Android to respond faster to security issues\n(keeping sensitive user data protected) and add new media formats quicker\n(providing consistency to both users and developers).\n\nChanges in Android 10\n---------------------\n\nAndroid 10 introduced several improvements related to identifying and extracting\ndata from media files, specifically:\n\n- Determining the file content type using the first part of a file's MIME type.\n For example, the OS knows that both `image/png` and\n `image/x-newly-invented-format` are images, and can thus accurately describe\n relevant permissions to the end user.\n\n- Determining the MIME type using only the file extension (and without using\n [content sniffing](https://en.wikipedia.org/wiki/Content_sniffing)\n to avoid security issues).\n\n- Determining the MIME type of an arbitrary file using a combination of\n [upstream Debian Linux and Android\n mappings](https://android-review.googlesource.com/c/platform/libcore/+/735506).\n\n- Returning relevant data from `video/*` and `audio/*` files (via\n `MediaMetadataRetriever`) and `image/*` files (via `ExifInterface`).\n\nChanges in Android 11\n---------------------\n\nIn Android 11, the MediaProvider module builds on the\nchanges made in Android 10 with the following improvements:\n\n- Improvements to indexing. The MediaProvider module now indexes metadata by\n reconciling available metadata against MediaStore public APIs. Changes\n include:\n\n - New `is_favorite` column and `QUERY_ARG_MATCH_FAVORITE` argument to enable\n gallery-style apps to quickly filter media based on this column.\n\n - Indexing color space metadata.\n\n - New 'is_trashed' column and `QUERY_ARG_MATCH_TRASHED` argument to enable\n gallery-style apps to filter based on this column.\n\n - New APIs that enable bulk-modification of multiple items with a single user\n dialog prompt, including `createDeleteRequest()`, `createFavoriteRequest()`,\n `createTrashRequest()`, and `createWriteRequest()`.\n\n - New `GENERATION_ADDED` and `GENERATION_MODIFIED` columns for use in quickly\n and reliably detecting changes that have occurred since a previous\n synchronization point.\n\n - New `GROUP BY` public API for use with additional metadata columns not\n mentioned above.\n\n- Improvement to `ExifInterface` to extract metadata from PNG and WebP\n containers.\n\n- Improvements to `SystemUI` to write `DateTimeOriginal` metadata in screen\n captures.\n\nIn addition, you can now customize MediaProvider by adding new media formats,\nmarking which storage devices should be indexed, and even replacing the MTP\nstack. For details, see [Customization](#customization).\n\nModule boundary\n---------------\n\nAndroid 11 migrates all code in\n`packages/providers/MediaProvider` to a new location, with the notable exception\nof MTP-related logic. In addition,\n`frameworks/base/core/java/android/provider/MediaStore.java` is now *inside* the\nmodule boundary at `packages/providers/MediaProvider`.\n\nPackage format\n--------------\n\nThe MediaProvider module is in APK-in-APEX format.\n\nDependencies\n------------\n\nMediaProvider dependencies are related to [customizations](#customization) (that\nis, if you customize MediaProvider, you must ensure your implementation meets\nthe dependency associated with your customization).\n\n- When using custom or nonstandard media file formats (for example, a format\n generated by a vendor-specific Camera app), you must register each custom\n format with `MimeUtils` and the Media Extractor module to enable indexing by\n MediaProvider.\n\n- To ensure MediaProvider indexes a custom set of storage devices (such SD card\n slots and USB ports) used in a `StorageManagerService` implementation, set the\n `VolumeInfo.MOUNT_FLAG_INDEXABLE` flag.\n\n- When using a custom (non-AOSP) MTP implementation, ensure the implementation\n relies solely on public and system APIs to enable the implementation to\n interact with MediaStore.\n\nCustomization\n-------------\n\nYou can now add new media formats, influence which storage devices are indexed,\nand replace the MTP stack.\n\n- **Custom media formats.** For each new custom media format, you must provide a\n mapping from the unique file extension to a MIME type. We strongly encourage\n you to follow the [IANA registration\n process](https://www.iana.org/assignments/media-types/media-types.xhtml).\n\n - You can't redefine an extension or MIME type that's already defined in AOSP.\n\n - For `video/*` and `audio/*` files, MediaProvider continues consulting\n `MediaMetadataRetriever`. Use the Android 10 Media Extractors to return\n metadata for custom formats.\n\n - For `image/*` files, MediaProvider continues standardizing on `Exif` for\n metadata. You can extend `android.media.ExifInterface` to extract and return\n `Exif` metadata for any custom image formats.\n\n- **Storage devices indexing flag.** MediaProvider indexes all volumes returned\n by `StorageManager.getStorageVolumes()` where\n `StorageVolume.getMediaStoreVolumeName()` is non-null. You can customize the\n list of volumes returned to influence what is indexed, but we advise against\n including transient volumes (such as USB OTG drives).\n\n- **MTP stack replacement.** Android 11 places the MTP\n stack entirely outside the module boundary and ensures that it works against\n public APIs.\n\nTesting\n-------\n\nYou can verify the functionality of MediaProvider using the following tests:\n\n- To verify the functionality of MediaStore public APIs, use tests in the\n `CtsProviderTestCases` package of the Android Compatibility Test Suite (CTS).\n\n- To verify the functionality of MediaProvider internals, use tests in\n `MediaProviderTests`.\n\nTo run both sets of tests together, use the following `atest` command: \n\n atest --test-mapping packages/providers/MediaProvider"]]