Moduł MediaProvider optymalizuje zindeksowane metadane (audio, wideo i obrazy z kart SD i urządzeń USB) oraz udostępnia te dane aplikacjom za pomocą publicznych interfejsów API MediaStore. Aby chronić prywatność użytkowników, moduł MediaProvider wymusza stosowanie ograniczonego modelu zabezpieczeń miejsca na dane wprowadzonego na Androidzie 10, który obejmuje usuwanie poufnych metadanych lokalizacji. Moduł można aktualizować, co umożliwia Androidowi szybsze reagowanie na problemy z bezpieczeństwem (ochronę poufnych danych użytkowników) i szybsze dodawanie nowych formatów multimediów (zapewniając spójność zarówno użytkownikom, jak i deweloperom).
Zmiany w Androidzie 10
W Androidzie 10 wprowadzono kilka ulepszeń związanych z identyfikacją i wyodrębnianiem danych z plików multimedialnych. Oto niektóre z nich:
Określanie typu treści pliku na podstawie pierwszej części typu MIME pliku. System operacyjny wie na przykład, że
image/png
iimage/x-newly-invented-format
są obrazami, więc może trafnie opisywać odpowiednie uprawnienia użytkownikowi.Określanie typu MIME tylko na podstawie rozszerzenia pliku (bez użycia sniffingu treści, aby uniknąć problemów z bezpieczeństwem).
Określanie typu MIME dowolnego pliku przy użyciu mapowania nadrzędnego systemu Debian Linux i Androida.
Zwracanie odpowiednich danych z plików
video/*
iaudio/*
(za pomocąMediaMetadataRetriever
) orazimage/*
plików (przy użyciuExifInterface
).
Zmiany w Androidzie 11
W Androidzie 11 moduł MediaProvider opiera się na zmianach wprowadzonych w Androidzie 10 i zawiera te ulepszenia:
Ulepszenia indeksowania. Moduł MediaProvider indeksuje teraz metadane przez uzgadnianie dostępnych metadanych z publicznymi interfejsami API MediaStore. Zmiany obejmują:
Nowa kolumna
is_favorite
i argumentQUERY_ARG_MATCH_FAVORITE
umożliwiają aplikacjom w stylu galerii szybkie filtrowanie multimediów na podstawie tej kolumny.Indeksowanie metadanych przestrzeni kolorów.
Nowa kolumna „is_trashed” i argument
QUERY_ARG_MATCH_TRASHED
umożliwiają filtrowanie aplikacji w stylu galerii na podstawie tej kolumny.Nowe interfejsy API, które umożliwiają zbiorczą modyfikację wielu elementów za pomocą prompta w oknie z jednym użytkownikiem, w tym
createDeleteRequest()
,createFavoriteRequest()
,createTrashRequest()
icreateWriteRequest()
.Nowe kolumny
GENERATION_ADDED
iGENERATION_MODIFIED
umożliwiają szybkie i niezawodne wykrywanie zmian, które nastąpiły od ostatniego punktu synchronizacji.Nowy publiczny interfejs API
GROUP BY
do użycia z dodatkowymi kolumnami metadanych, które nie zostały wymienione powyżej.
Ulepszenie
ExifInterface
pozwalające na wyodrębnianie metadanych z kontenerów PNG i WebP.Poprawki w
SystemUI
, które umożliwiają zapisywanie metadanychDateTimeOriginal
na zrzutach ekranu.
Dodatkowo możesz teraz dostosować MediaProvider, dodając nowe formaty multimediów, oznaczając urządzenia pamięci masowej, które mają być indeksowane, a nawet zastępując stos MTP. Szczegółowe informacje znajdziesz w sekcji Dostosowywanie.
Granica modułu
Android 11 przenosi cały kod z packages/providers/MediaProvider
do nowej lokalizacji z wyjątkiem logiki związanej z MTP. Dodatkowo frameworks/base/core/java/android/provider/MediaStore.java
znajduje się teraz wewnątrz granicy modułu w witrynie packages/providers/MediaProvider
.
Format pakietu
Moduł MediaProvider ma format APK-in-APEX.
Zależności
Zależności MediaProvider są związane z dostosowaniami (to znaczy, że jeśli dostosowujesz MediaProvider, musisz się upewnić, że implementacja spełnia zależność związaną z dostosowaniem).
Jeśli używasz niestandardowych lub niestandardowych formatów plików multimedialnych (np. formatu wygenerowanego przez aplikację Aparat danego dostawcy), musisz zarejestrować każdy format niestandardowy w usłudze
MimeUtils
i module wyodrębniania multimediów, aby umożliwić indeksowanie przez MediaProvider.Aby mieć pewność, że MediaProvider zindeksuje niestandardowy zestaw urządzeń pamięci masowej (takich jak gniazda kart SD i porty USB) używanych w implementacji
StorageManagerService
, ustaw flagęVolumeInfo.MOUNT_FLAG_INDEXABLE
.Jeśli korzystasz z niestandardowego (nieAOSP) implementacji MTP, upewnij się, że implementacja opiera się wyłącznie na publicznych i systemowych interfejsach API, aby umożliwić interakcję z MediaStore.
Personalizacja
Możesz teraz dodawać nowe formaty multimediów, wpływać na indeksowanie urządzeń pamięci i zastępować stos MTP.
Niestandardowe formaty multimediów. Dla każdego nowego niestandardowego formatu multimediów musisz określić mapowanie z unikalnego rozszerzenia pliku na typ MIME. Gorąco zachęcamy do przestrzegania procesu rejestracji IANA.
Nie można ponownie zdefiniować rozszerzenia ani typu MIME, które są już zdefiniowane w AOSP.
W przypadku plików
video/*
iaudio/*
MediaProvider kontynuuje konsultacjeMediaMetadataRetriever
. Użyj modułu wyodrębniania multimediów z Androida 10, aby zwrócić metadane w formatach niestandardowych.W przypadku plików
image/*
MediaProvider kontynuuje standaryzację metadanychExif
. Możesz rozszerzyćandroid.media.ExifInterface
, aby wyodrębniać i zwracać metadaneExif
w przypadku dowolnych niestandardowych formatów graficznych.
Flaga indeksowania urządzeń pamięci. MediaProvider indeksuje wszystkie woluminy zwrócone przez funkcję
StorageManager.getStorageVolumes()
, przy czymStorageVolume.getMediaStoreVolumeName()
ma wartość inną niż null. Możesz dostosować listę zwracanych woluminów, aby wpłynąć na to, co jest indeksowane, ale odradzamy uwzględnianie woluminów tymczasowych (takich jak dyski USB OTG).Zastąpienie stosu MTP. Android 11 umieszcza stos MTP całkowicie poza granicami modułów i zapewnia jego działanie w porównaniu z publicznymi interfejsami API.
Testowanie
Aby sprawdzić działanie obiektu MediaProvider, przeprowadź te testy:
Aby sprawdzić działanie publicznych interfejsów API MediaStore, użyj testów w pakiecie
CtsProviderTestCases
pakietu Android Compatibility Test Suite (CTS).Aby sprawdzić działanie zasobów wewnętrznych MediaProvider, użyj testów w
MediaProviderTests
.
Aby uruchomić oba zestawy testów jednocześnie, użyj tego polecenia atest
:
atest --test-mapping packages/providers/MediaProvider