Android 11 (poziom API 30) jeszcze bardziej ulepsza platformę, zapewniając lepszą ochronę danych użytkownika i aplikacji w pamięci zewnętrznej. Ta wersja wprowadza kilka ulepszeń, takich jak dostęp do surowych ścieżek plików, operacje zbiorcze na multimediach i zaktualizowany interfejs Storage Access Framework.
W tej wersji wprowadziliśmy też ulepszenia w zakresie ograniczonego dostępu do miejsca na dane, co ułatwia deweloperom realizowanie przypadków użycia związanych z miejscem na dane po przejściu na ten model.
Wymuszanie ograniczonego dostępu do miejsca na dane
Aplikacje, które działają na Androidzie 11, ale są kierowane na Androida 10
(poziom API 29), nadal mogą prosić o
requestLegacyExternalStorage
atrybut. Ta flaga pozwala aplikacjom tymczasowo zrezygnować ze
zmian związanych
z ograniczonym dostępem do miejsca na dane, takich jak przyznawanie dostępu do różnych katalogów i
różnych typów plików multimedialnych. Gdy zaktualizujesz aplikację, aby była kierowana na Androida 11, system zignoruje flagę requestLegacyExternalStorage.
Zachowanie zgodności z Androidem 10
Jeśli Twoja aplikacja rezygnuje z ograniczonego dostępu do miejsca na dane, gdy działa na urządzeniach z Androidem 10, zalecamy, aby w pliku manifestu aplikacji nadal ustawiać wartość requestLegacyExternalStorage na true. Dzięki temu aplikacja będzie działać zgodnie z oczekiwaniami na urządzeniach z Androidem 10.
Migracja danych do katalogów widocznych podczas korzystania z ograniczonego dostępu do miejsca na dane
Jeśli Twoja aplikacja korzysta ze starszego modelu miejsca na dane i była wcześniej kierowana na Androida 10 lub starszego, możesz przechowywać dane w katalogu, do którego aplikacja nie ma dostępu, gdy włączony jest model ograniczonego dostępu do miejsca na dane. Zanim zaczniesz kierować aplikację na Androida 11, przenieś dane do katalogu zgodnego z ograniczonym dostępem do miejsca na dane.
Testowanie ograniczonego dostępu do miejsca na dane
Aby włączyć ograniczony dostęp do miejsca na dane w aplikacji, niezależnie od docelowej wersji pakietu SDK i wartości flagi manifestu, włącz te flagi zgodności aplikacji:
DEFAULT_SCOPED_STORAGE(domyślnie włączona we wszystkich aplikacjach),FORCE_ENABLE_SCOPED_STORAGE(domyślnie wyłączona we wszystkich aplikacjach).
Aby wyłączyć ograniczony dostęp do miejsca na dane i zamiast tego używać starszego modelu miejsca na dane, wyłącz obie flagi.
Zarządzanie pamięcią urządzenia
Od Androida 11 aplikacje, które korzystają z modelu ograniczonego dostępu do miejsca na dane, mogą uzyskiwać dostęp tylko do własnych plików pamięci podręcznej. Jeśli Twoja aplikacja musi zarządzać pamięcią urządzenia, postępuj zgodnie z instrukcjami dotyczącymi sprawdzania wolnego miejsca.
- Sprawdź, czy jest wystarczająco dużo wolnego miejsca, wywołując działanie intencji
ACTION_MANAGE_STORAGE. Jeśli na urządzeniu nie ma wystarczająco dużo wolnego miejsca, poproś użytkownika o zgodę na wyczyszczenie wszystkich pamięci podręcznych. Aby to zrobić, wywołaj działanie intencji
ACTION_CLEAR_APP_CACHE.
Katalog aplikacji w pamięci zewnętrznej
Od Androida 11 aplikacje nie mogą tworzyć własnego
katalogu w pamięci zewnętrznej. Aby
uzyskać dostęp do katalogu udostępnianego przez system, wywołaj funkcję
getExternalFilesDirs().
Dostęp do plików multimedialnych
Aby ułatwić dostęp do multimediów przy jednoczesnym zachowaniu prywatności użytkowników, w Androidzie 11 dodaliśmy te funkcje:
Wykonywanie operacji zbiorczych
Aby zapewnić spójność na różnych urządzeniach i zwiększyć wygodę użytkowników, w Androidzie 11 dodaliśmy kilka metod, które ułatwiają zarządzanie grupami plików multimedialnych.
Dostęp do plików za pomocą bezpośrednich ścieżek i bibliotek natywnych
Aby ułatwić aplikacji współpracę z bibliotekami multimediów innych firm,
Android 11 umożliwia korzystanie z interfejsów API innych niż
MediaStore do uzyskiwania dostępu do
plików multimedialnych z pamięci współdzielonej za pomocą bezpośrednich ścieżek. Te interfejsy API obejmują:
- interfejs API
File. - biblioteki natywne, takie jak
fopen().
Dostęp do danych z innych aplikacji
Aby chronić prywatność użytkowników, w przypadku urządzeń z Androidem 11 lub nowszym system dodatkowo ogranicza dostęp aplikacji do prywatnych katalogów innych aplikacji.
Dostęp do katalogów danych w pamięci wewnętrznej
Android 9 (poziom API 28) zaczął ograniczać, które aplikacje mogą udostępniać pliki w swoich katalogach danych w pamięci wewnętrznej innym aplikacjom. Aplikacje kierowane na Androida 9 lub nowszego nie mogą udostępniać plików w swoich katalogach danych .
Android 11 rozszerza to ograniczenie. Jeśli Twoja aplikacja jest kierowana na Androida 11, nie może uzyskiwać dostępu do plików w katalogu danych innej aplikacji, nawet jeśli ta aplikacja jest kierowana na Androida 8.1 (poziom API 27) lub starszego i udostępnia pliki w swoim katalogu danych do odczytu.
Dostęp do katalogów aplikacji w pamięci zewnętrznej
W Androidzie 11 aplikacje nie mogą już uzyskiwać dostępu do plików w żadnym innym katalogu dedykowanym dla aplikacji w pamięci zewnętrznej.
Ograniczenia dostępu do dokumentów
Aby dać deweloperom czas na testowanie, te zmiany związane z Storage Access Framework (SAF) zaczną obowiązywać tylko wtedy, gdy Twoja aplikacja będzie kierowana na Androida 11 lub nowszego.
Dostęp do katalogów
Nie możesz już używać działania intencji
ACTION_OPEN_DOCUMENT_TREE
, aby prosić o dostęp do tych katalogów:
- katalog główny woluminu pamięci wewnętrznej;
- katalog główny każdego woluminu karty SD, który producent urządzenia uważa za niezawodny, niezależnie od tego, czy karta jest emulowana czy wyjmowana. Niezawodny wolumin to taki, do którego aplikacja może uzyskać dostęp w większości przypadków;
- katalog
Download.
Dostęp do plików
Nie możesz już używać działania intencji
ACTION_OPEN_DOCUMENT_TREE
ani
ACTION_OPEN_DOCUMENT
, aby prosić użytkownika o wybranie poszczególnych plików z tych
katalogów:
- katalog
Android/data/i wszystkie podkatalogi; - katalog
Android/obb/i wszystkie podkatalogi.
Testowanie zmiany
Aby przetestować tę zmianę w działaniu, wykonaj te czynności:
- Wywołaj intencję z działaniem
ACTION_OPEN_DOCUMENT. Sprawdź, czy nie wyświetlają się katalogiAndroid/data/iAndroid/obb/. - Wykonaj jedną z tych czynności:
- Włącz flagę zgodności aplikacji
RESTRICT_STORAGE_ACCESS_FRAMEWORK. - Kieruj aplikację na Androida 11 lub nowszego.
- Włącz flagę zgodności aplikacji
- Wywołaj intencję z działaniem
ACTION_OPEN_DOCUMENT_TREE. Sprawdź, czy wyświetla się katalogDownload, a przycisk polecenia powiązany z tym katalogiem jest wyszarzony.
Uprawnienia
W Androidzie 11 wprowadziliśmy te zmiany związane z uprawnieniami do miejsca na dane.
Kierowanie na dowolną wersję
READ_EXTERNAL_STORAGE.Te zmiany zaczną obowiązywać w Androidzie 11 niezależnie od docelowej wersji pakietu SDK aplikacji:
- Uprawnienia w czasie działania (aplikacji) Miejsce na dane zostały zmienione na Pliki i & multimedia.
Jeśli Twoja aplikacja nie zrezygnowała z ograniczonego dostępu do miejsca na dane i prosi o
READ_EXTERNAL_STORAGEuprawnienia, użytkownicy zobaczą inne okno niż w Androidzie 10. Okno informuje, że aplikacja prosi o dostęp do zdjęć i multimediów, jak pokazano na rysunku 1.Użytkownicy mogą sprawdzić, które aplikacje mają uprawnienia
READ_EXTERNAL_STORAGE, w ustawieniach systemu. Na stronie Ustawienia > Prywatność > Menedżer uprawnień > Pliki i multimedia każda aplikacja, która ma te uprawnienia, jest wymieniona w sekcji Dozwolone dla wszystkich plików. Jeśli Twoja aplikacja jest kierowana na Androida 11, pamiętaj, że ten dostęp do "wszystkich plików" jest tylko do odczytu. Aby odczytywać i zapisywać wszystkie pliki w pamięci współdzielonej za pomocą tej aplikacji, musisz mieć uprawnienia dostępu do wszystkich plików access.
Kierowanie na Androida 11
Jeśli Twoja aplikacja jest kierowana na Androida 11, uprawnienia WRITE_EXTERNAL_STORAGE i uprzywilejowane uprawnienia WRITE_MEDIA_STORAGE nie zapewniają już dodatkowego dostępu.
Pamiętaj, że na urządzeniach z Androidem 10 (poziom API 29) lub nowszym Twoja aplikacja może dodawać treści do dobrze zdefiniowanych kolekcji multimediów, takich jak MediaStore.Downloads, bez konieczności proszenia o uprawnienia związane z miejscem na dane. Dowiedz się
więcej o tym, jak prosić tylko o niezbędne
uprawnienia podczas
pracy z plikami multimedialnymi w aplikacji.
Dostęp do wszystkich plików
Większość aplikacji, które wymagają dostępu do pamięci współdzielonej, może stosować sprawdzone metody udostępniania plików multimedialnych i plików innych niż multimedialne. Niektóre aplikacje mają jednak podstawowy przypadek użycia, który wymaga szerokiego dostępu do plików na urządzeniu, ale nie mogą tego zrobić skutecznie przy użyciu sprawdzonych metod związanych z miejscem na dane, które zapewniają prywatność. W takich sytuacjach Android udostępnia specjalny dostęp do aplikacji o nazwie Dostęp do wszystkich plików. Więcej informacji znajdziesz w przewodniku Zarządzanie wszystkimi plikami na urządzeniu pamięci.
Dodatkowe materiały
Więcej informacji o zmianach w miejscu na dane w Androidzie 11 znajdziesz w tych materiałach: