MediaProvider 模組會最佳化已建立索引的中繼資料 (音訊、影片和圖片 從 SD 卡和 USB 裝置存取資料),並透過 MediaStore 公開 API 為了維護使用者隱私,MediaProvider 模組會強制執行限定範圍儲存空間。 安全性 模型 其中包含遮蓋敏感位置中繼資料。 這個模組可更新,讓 Android 更快回應安全性問題 (確保使用者機密資料受到保護),並更快加入新的媒體格式 讓使用者和開發人員保持一致。
Android 10 的異動
Android 10 推出了幾項辨識及擷取功能 來自媒體檔案的資料,具體來說是:
使用檔案 MIME 類型的第一個部分決定檔案類型。 舉例來說,OS 知道
image/png
和image/x-newly-invented-format
是圖片,因此能準確描述 授予使用者相關權限僅使用副檔名 (且不使用 偵測內容 ,避免發生安全性問題)。
從
video/*
和audio/*
檔案中傳回相關資料 (透過MediaMetadataRetriever
) 和image/*
個檔案 (透過ExifInterface
)。
Android 11 的異動
在 Android 11 中,MediaProvider 模組是以 針對 Android 10 進行的變更,提供了以下改善:
改善索引功能。MediaProvider 模組現在會將中繼資料編入索引 核對可用中繼資料與 MediaStore 公開 API。變更內容 包括:
新增
is_favorite
欄和QUERY_ARG_MATCH_FAVORITE
引數即可啟用 透過圖片庫樣式的應用程式,即可根據這個資料欄快速篩選媒體。正在建立色域中繼資料。
新的「is_trashed」和
QUERY_ARG_MATCH_TRASHED
引數即可啟用 根據這個資料欄進行篩選。新的 API,可讓單一使用者大量修改多個項目 對話方塊提示,包括
createDeleteRequest()
、createFavoriteRequest()
createTrashRequest()
和createWriteRequest()
。可快速使用的新
GENERATION_ADDED
和GENERATION_MODIFIED
欄 有效偵測從上一個執行個體開始發生的變更 同步處理點新的
GROUP BY
公用 API 可與其他中繼資料欄搭配使用 如前所述。
改善
ExifInterface
,可從 PNG 和 WebP 擷取中繼資料 容器改善
SystemUI
,以便將DateTimeOriginal
中繼資料寫入畫面中 擷取。
此外,您現在可以新增媒體格式,自訂 MediaProvider。 標示應為哪些儲存裝置建立索引,甚至取代 MTP 詳情請參閱「自訂」。
模組邊界
Android 11 會遷移
「packages/providers/MediaProvider
」到新位置,但明顯的例外情況
MTP 相關邏輯的組成。此外,
frameworks/base/core/java/android/provider/MediaStore.java
目前位於內部
在 packages/providers/MediaProvider
存取模組邊界。
套件格式
MediaProvider 模組採用 APK-in-APEX 格式。
依附元件
MediaProvider 依附元件與自訂相關 ( 如果自訂 MediaProvider,就必須確保導入方式符合 或是自訂的依附元件)。
使用自訂或非標準的媒體檔案格式 (例如 供應商專用相機應用程式產生的自訂曝光數),請分別註冊每個自訂 格式加上
MimeUtils
和 Media Extractor 模組,以透過 MediaProvider。確保 MediaProvider 會為自訂儲存裝置 (例如 SD 卡) 建立索引 建立在
StorageManagerService
實作中使用的運算單元和 USB 連接埠),請將VolumeInfo.MOUNT_FLAG_INDEXABLE
標記。使用自訂 (非 Android 開放原始碼計畫) MTP 實作時,請務必完成導入程序 完全仰賴公用和系統 API 來執行 就會與 MediaStore 互動
自訂
您現在可以新增媒體格式,決定哪些儲存裝置已編入索引 並取代 MTP 堆疊
自訂媒體格式。針對每個新的自訂媒體格式,您必須提供 將專屬副檔名對應至 MIME 類型。強烈建議你 必須遵守 IANA 註冊編號 程序。
您無法重新定義已在 Android 開放原始碼計畫中定義的擴充功能或 MIME 類型。
針對
video/*
和audio/*
檔案,MediaProvider 會繼續諮詢MediaMetadataRetriever
。使用 Android 10 媒體擷取器傳回 自訂格式的中繼資料針對
image/*
檔案,MediaProvider 繼續在Exif
上將下列項目標準化: 中繼資料。您可以擴充android.media.ExifInterface
來擷取並傳回 任何自訂圖片格式的Exif
中繼資料。
儲存裝置索引標記。MediaProvider 會為所有傳回的磁碟區建立索引 上傳者:
StorageManager.getStorageVolumes()
,來源:StorageVolume.getMediaStoreVolumeName()
非空值。也可以自訂 會影響已建立索引的磁碟區清單,但我們建議不要 包括暫時磁碟區 (例如 USB OTG 磁碟機)。MTP 堆疊替換。Android 11 會放置 MTP 完全位於模組邊界之外 公開 API
測試
您可以使用下列測試驗證 MediaProvider 的功能:
如要驗證 MediaStore 公開 API 的功能,請使用 Android Compatibility Test Suite (CTS) 的
CtsProviderTestCases
套件。如要驗證 MediaProvider 內部功能的功能,請在
MediaProviderTests
。
如要同時執行這兩組測試,請使用下列 atest
指令:
atest --test-mapping packages/providers/MediaProvider