Moduł MediaProvider optymalizuje zindeksowane metadane (audio, wideo i obrazy) z kart SD i urządzeń USB) oraz udostępnia te dane aplikacjom za pomocą MediaStore publiczne interfejsów API. Aby zachować prywatność użytkowników, moduł MediaProvider wymusza stosowanie limitu miejsca na dane zabezpieczenia model wprowadzone w Androidzie 10, które obejmują usuwanie poufnych metadanych lokalizacji. Moduł można aktualizować, dzięki czemu Android szybciej reaguje na problemy z bezpieczeństwem. (zachowanie ochrony 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, a w szczególności:
Określanie typu treści pliku na podstawie pierwszej części typu MIME pliku. Na przykład system operacyjny wie, że zarówno
image/png
, jak iimage/x-newly-invented-format
to obrazy, dzięki czemu mogą dokładnie opisywać przyznanych użytkownikowi odpowiednich uprawnień.Określanie typu MIME tylko na podstawie rozszerzenia pliku (bez użycia przechwytywanie treści w celu uniknięcia problemów z bezpieczeństwem).
Określanie typu MIME dowolnego pliku na podstawie kombinacji nadrzędnego środowiska Debian Linux i Android .
Zwracanie odpowiednich danych z plików
video/*
iaudio/*
(za pomocąMediaMetadataRetriever
) iimage/*
plików (przezExifInterface
).
Zmiany w Androidzie 11
W Androidzie 11 moduł MediaProvider opiera się na zmiany wprowadzone w Androidzie 10, w tym te ulepszenia:
Ulepszenia indeksowania. Moduł MediaProvider indeksuje teraz metadane według uzgadnianie dostępnych metadanych z publicznymi interfejsami API MediaStore. Zmiany uwzględnij:
Nowa kolumna
is_favorite
iQUERY_ARG_MATCH_FAVORITE
argument do włączenia aplikacje typu galeria, by szybko filtrować multimedia na podstawie tej kolumny.Indeksowanie metadanych przestrzeni kolorów.
Nowy element „is_trashed” kolumna i
QUERY_ARG_MATCH_TRASHED
argument do włączenia aplikacje w stylu galerii, które ma być przefiltrowane na podstawie tej kolumny.Nowe interfejsy API, które umożliwiają zbiorczą modyfikację wielu elementów dla jednego użytkownika w tym
createDeleteRequest()
,createFavoriteRequest()
,createTrashRequest()
icreateWriteRequest()
.Nowe kolumny
GENERATION_ADDED
iGENERATION_MODIFIED
do szybkiego użytku i skutecznie wykrywać zmiany, które zaszły od czasu poprzedniego punktu synchronizacji.Nowy publiczny interfejs API
GROUP BY
do użycia z dodatkowymi kolumnami metadanych nie wspomniane powyżej.
Ulepszenie do wyodrębniania metadanych z plików PNG i WebP w pliku
ExifInterface
kontenery.Ulepszenia funkcji
SystemUI
w zakresie zapisywania metadanychDateTimeOriginal
na ekranie zdjęcia.
Dodatkowo można teraz dostosowywać MediaProvider, dodając nowe formaty multimediów oznaczanie urządzeń pamięci do indeksowania, a nawet zastąpienie MTP stosów. Szczegółowe informacje znajdziesz w sekcji Dostosowywanie.
Granica modułu
Android 11 przenosi cały kod
packages/providers/MediaProvider
do nowej lokalizacji (z istotnym wyjątkiem)
i zasady MTP. Ponadto
frameworks/base/core/java/android/provider/MediaStore.java
znajduje się teraz wewnątrz
granicę modułu w punkcie packages/providers/MediaProvider
.
Format pakietu
Moduł MediaProvider ma format APK-in-APEX.
Zależności
Zależności MediaProvider są związane z dostosowaniami (które Jeśli dostosowujesz MediaProvider, musisz się upewnić, że implementacja spełnia zależność związana z Twoimi dostosowaniami).
Gdy korzystasz z niestandardowych lub niestandardowych formatów plików multimedialnych (np. wygenerowane przez aplikację Aparat danego dostawcy), musisz zarejestrować każdą niestandardową za pomocą
MimeUtils
i modułu Media Extractor, aby włączyć indeksowanie MediaProvider.Aby zapewnić indeksowanie przez MediaProvider niestandardowego zestawu urządzeń pamięci (takich jak karta SD) i porty USB) używanych w implementacji
StorageManagerService
, ustawVolumeInfo.MOUNT_FLAG_INDEXABLE
.Jeśli korzystasz z niestandardowego (nie AOSP) implementacji MTP, upewnij się, że opiera się wyłącznie na publicznych i systemowych interfejsach API, aby umożliwiać implementację wchodzić w interakcję z MediaStore.
Dostosowywanie
Możesz teraz dodawać nowe formaty multimediów, wpływać na to, które urządzenia pamięci masowej są indeksowane, i wymienić stos MTP.
Niestandardowe formaty multimediów. W przypadku każdego nowego niestandardowego formatu multimediów musisz podać atrybut z unikalnego rozszerzenia pliku na typ MIME. Zdecydowanie zalecamy przestrzegać 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ć urządzenie metadanych formatów niestandardowych.W przypadku plików
image/*
MediaProvider kontynuuje standaryzację klasyExif
w przypadku metadanych. Możesz przedłużyć:android.media.ExifInterface
, aby pobrać i zwrócić daneExif
dla dowolnych niestandardowych formatów obrazów.
Flaga indeksowania urządzeń pamięci. MediaProvider indeksuje wszystkie zwrócone woluminy przez
StorageManager.getStorageVolumes()
, gdzie PoleStorageVolume.getMediaStoreVolumeName()
nie ma wartości null. Możesz dostosować lista woluminów, które mają wpływ na to, co jest indeksowane, ale odradzamy w tym woluminy tymczasowe (np. dyski OTG USB).Zastąpienie stosu MTP. Android 11 umieszcza MTP są całkowicie poza granicami modułu i zapewniają publicznych interfejsów API.
Testowanie
Aby sprawdzić działanie obiektu MediaProvider, przeprowadź te testy:
Aby sprawdzić działanie publicznych interfejsów API MediaStore, przeprowadź testy w sekcji
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