Mô-đun MediaProvider tối ưu hóa siêu dữ liệu được lập chỉ mục (âm thanh, video và hình ảnh từ thẻ SD và thiết bị USB) và cung cấp dữ liệu đó cho các ứng dụng thông qua API công khai MediaStore . Để duy trì quyền riêng tư của người dùng, mô-đun MediaProvider thực thi mô hình bảo mật lưu trữ có phạm vi được giới thiệu trong Android 10, bao gồm việc sắp xếp lại siêu dữ liệu vị trí nhạy cảm. Mô-đun này có thể cập nhật, cho phép Android phản hồi nhanh hơn trước các vấn đề bảo mật (bảo vệ dữ liệu nhạy cảm của người dùng) và thêm các định dạng phương tiện mới nhanh hơn (cung cấp tính nhất quán cho cả người dùng và nhà phát triển).
Những thay đổi trong Android 10
Android 10 đã giới thiệu một số cải tiến liên quan đến việc xác định và trích xuất dữ liệu từ các tệp phương tiện, cụ thể:
Xác định loại nội dung tệp bằng phần đầu tiên của loại MIME của tệp. Ví dụ: HĐH biết rằng cả
image/png
vàimage/x-newly-invented-format
đều là hình ảnh và do đó có thể mô tả chính xác các quyền có liên quan cho người dùng cuối.Xác định loại MIME chỉ sử dụng phần mở rộng tệp (và không sử dụng tính năng đánh hơi nội dung để tránh các vấn đề bảo mật).
Xác định loại MIME của một tệp tùy ý bằng cách sử dụng kết hợp ánh xạ Debian Linux và Android ngược dòng .
Trả về dữ liệu liên quan từ các tệp
video/*
vàaudio/*
(thông quaMediaMetadataRetriever
) và các tệpimage/*
(thông quaExifInterface
).
Những thay đổi trong Android 11
Trong Android 11, mô-đun MediaProvider được xây dựng dựa trên những thay đổi được thực hiện trong Android 10 với những cải tiến sau:
Cải tiến để lập chỉ mục. Mô-đun MediaProvider hiện lập chỉ mục siêu dữ liệu bằng cách đối chiếu siêu dữ liệu có sẵn với các API công khai của MediaStore. Những thay đổi bao gồm:
Cột
is_favorite
mới và đối sốQUERY_ARG_MATCH_FAVORITE
mới để cho phép các ứng dụng kiểu thư viện lọc nhanh phương tiện dựa trên cột này.Lập chỉ mục siêu dữ liệu không gian màu.
Cột 'is_trashed' mới và đối số
QUERY_ARG_MATCH_TRASHED
mới để cho phép các ứng dụng kiểu thư viện lọc dựa trên cột này.Các API mới cho phép sửa đổi hàng loạt nhiều mục chỉ bằng một lời nhắc hộp thoại của người dùng, bao gồm
createDeleteRequest()
,createFavoriteRequest()
,createTrashRequest()
vàcreateWriteRequest()
.Các cột
GENERATION_ADDED
vàGENERATION_MODIFIED
mới để sử dụng trong việc phát hiện nhanh chóng và đáng tin cậy các thay đổi đã xảy ra kể từ điểm đồng bộ hóa trước đó.API công khai
GROUP BY
mới để sử dụng với các cột siêu dữ liệu bổ sung không được đề cập ở trên.
Cải thiện
ExifInterface
để trích xuất siêu dữ liệu từ vùng chứa PNG và WebP.Các cải tiến đối với
SystemUI
để ghi siêu dữ liệuDateTimeOriginal
vào ảnh chụp màn hình.
Ngoài ra, giờ đây bạn có thể tùy chỉnh MediaProvider bằng cách thêm các định dạng phương tiện mới, đánh dấu thiết bị lưu trữ nào sẽ được lập chỉ mục và thậm chí thay thế ngăn xếp MTP. Để biết chi tiết, hãy xem Tùy chỉnh .
Ranh giới mô-đun
Android 11 di chuyển tất cả mã trong packages/providers/MediaProvider
sang một vị trí mới, ngoại trừ logic liên quan đến MTP. Ngoài ra, frameworks/base/core/java/android/provider/MediaStore.java
hiện nằm trong ranh giới mô-đun tại packages/providers/MediaProvider
.
Định dạng gói
Mô-đun MediaProvider có định dạng APK-in-APEX.
phụ thuộc
Các phần phụ thuộc của MediaProvider có liên quan đến các tùy chỉnh (nghĩa là, nếu tùy chỉnh MediaProvider, bạn phải đảm bảo việc triển khai của mình đáp ứng phần phụ thuộc được liên kết với tùy chỉnh của bạn).
Khi sử dụng các định dạng tệp phương tiện tùy chỉnh hoặc không chuẩn (ví dụ: định dạng được tạo bởi ứng dụng Máy ảnh dành riêng cho nhà cung cấp), bạn phải đăng ký từng định dạng tùy chỉnh với
MimeUtils
và mô-đun Media Extractor để bật tính năng lập chỉ mục của MediaProvider.Để đảm bảo MediaProvider lập chỉ mục một bộ thiết bị lưu trữ tùy chỉnh (chẳng hạn như khe cắm thẻ SD và cổng USB) được sử dụng khi triển khai
StorageManagerService
, hãy đặt cờVolumeInfo.MOUNT_FLAG_INDEXABLE
.Khi sử dụng triển khai MTP tùy chỉnh (không phải AOSP), hãy đảm bảo việc triển khai chỉ dựa vào API công khai và API hệ thống để cho phép triển khai tương tác với MediaStore.
Tùy chỉnh
Giờ đây, bạn có thể thêm các định dạng phương tiện mới, tác động đến thiết bị lưu trữ nào được lập chỉ mục và thay thế ngăn xếp MTP.
Định dạng phương tiện tùy chỉnh. Đối với mỗi định dạng phương tiện tùy chỉnh mới, bạn phải cung cấp ánh xạ từ phần mở rộng tệp duy nhất sang loại MIME. Chúng tôi thực sự khuyến khích bạn làm theo quy trình đăng ký IANA .
Bạn không thể xác định lại tiện ích mở rộng hoặc loại MIME đã được xác định trong AOSP.
Đối với các tệp
video/*
vàaudio/*
, MediaProvider tiếp tục tư vấnMediaMetadataRetriever
. Sử dụng Trình trích xuất phương tiện Android 10 để trả về siêu dữ liệu cho các định dạng tùy chỉnh.Đối với tệp
image/*
, MediaProvider tiếp tục chuẩn hóaExif
cho siêu dữ liệu. Bạn có thể mở rộngandroid.media.ExifInterface
để trích xuất và trả về siêu dữ liệuExif
cho mọi định dạng hình ảnh tùy chỉnh.
Cờ lập chỉ mục thiết bị lưu trữ. MediaProvider lập chỉ mục tất cả các tập được trả về bởi
StorageManager.getStorageVolumes()
trong đóStorageVolume.getMediaStoreVolumeName()
không có giá trị rỗng. Bạn có thể tùy chỉnh danh sách các ổ đĩa được trả về để tác động đến những gì được lập chỉ mục, nhưng chúng tôi khuyên bạn không nên đưa các ổ đĩa tạm thời (chẳng hạn như ổ USBOTG).Thay thế ngăn xếp MTP. Android 11 đặt ngăn xếp MTP hoàn toàn bên ngoài ranh giới mô-đun và đảm bảo rằng ngăn xếp này hoạt động dựa trên các API công khai.
Kiểm tra
Bạn có thể xác minh chức năng của MediaProvider bằng các thử nghiệm sau:
Để xác minh chức năng của các API công khai MediaStore, hãy sử dụng các thử nghiệm trong gói
CtsProviderTestCases
của Bộ kiểm tra khả năng tương thích Android (CTS).Để xác minh chức năng của nội bộ MediaProvider, hãy sử dụng các thử nghiệm trong
MediaProviderTests
.
Để chạy cả hai bộ thử nghiệm cùng nhau, hãy sử dụng lệnh atest
sau:
atest --test-mapping packages/providers/MediaProvider