Android 11 (poziom API 30) jeszcze bardziej ulepsza platformę, zapewniając lepszą ochronę danych aplikacji i użytkowników na zewnętrznych nośnikach danych. Ta wersja wprowadza kilka ulepszeń, takich jak dostęp do ścieżki pliku w formacie RAW, operacje edycji zbiorczej multimediów i zaktualizowany interfejs Storage Access Framework.
Wprowadzono też ulepszenia zakresowego miejsca na dane, które ułatwiają deweloperom realizację przypadków użycia miejsca na dane po przejściu na ten model.
Egzekwowanie ograniczonego dostępu do miejsca na dane
Aplikacje, które działają na Androidzie 11, ale są kierowane na Androida 10 (API na poziomie 29), nadal mogą wysyłać żądanie atrybutu requestLegacyExternalStorage
. Ta flaga umożliwia aplikacjom tymczasowe wyłączenie zmian związanych z pamięcią o ograniczonym zakresie, takich jak przyznawanie dostępu do różnych katalogów i różnych typów plików multimedialnych. Po zaktualizowaniu aplikacji tak, aby była kierowana na Androida 11, system ignoruje flagę requestLegacyExternalStorage
.
Utrzymywanie zgodności z Androidem 10
Jeśli aplikacja rezygnuje z pamięci o ograniczonym zakresie na urządzeniach z Androidem 10, zalecamy, aby w pliku manifestu aplikacji nadal ustawiać wartość requestLegacyExternalStorage
na true
. Dzięki temu aplikacja będzie nadal działać zgodnie z oczekiwaniami na urządzeniach z Androidem 10.
Przenoszenie danych do katalogów widocznych podczas korzystania z pamięci o ograniczonym zakresie
Jeśli Twoja aplikacja korzysta ze starszego modelu pamięci i wcześniej była 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 pamięci o ograniczonym zakresie. Zanim zaczniesz kierować aplikację na Androida 11, przenieś dane do katalogu zgodnego z pamięcią o ograniczonym zakresie.
Testowanie ograniczonego dostępu do miejsca na dane
Aby włączyć w aplikacji pamięć o ograniczonym zakresie, niezależnie od wersji docelowego pakietu SDK i wartości flagi w pliku manifestu, włącz te flagi zgodności aplikacji:
DEFAULT_SCOPED_STORAGE
(domyślnie włączone w przypadku wszystkich aplikacji)FORCE_ENABLE_SCOPED_STORAGE
(domyślnie wyłączone w przypadku wszystkich aplikacji)
Aby wyłączyć pamięć o ograniczonym zakresie i zamiast niej używać starszego modelu pamięci, wyłącz oba te flagi.
Zarządzanie miejscem na urządzeniu
Od Androida 11 aplikacje korzystające z modelu ograniczonego dostępu do pamięci mogą uzyskiwać dostęp tylko do własnych plików pamięci podręcznej. Jeśli Twoja aplikacja musi zarządzać miejscem na dane na urządzeniu, postępuj zgodnie z instrukcjami dotyczącymi sprawdzania ilości wolnego miejsca.
- Sprawdź ilość 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 wyrażenie zgody na wyczyszczenie wszystkich pamięci podręcznych przez Twoją aplikację. 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łasnych katalogów specyficznych dla aplikacji w pamięci zewnętrznej. Aby uzyskać dostęp do katalogu udostępnianego przez system aplikacji, 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, Android 11 wprowadza te funkcje:
Wykonywanie operacji wsadowych
Aby zapewnić spójność na różnych urządzeniach i większą wygodę użytkowników, Android 11 udostępnia 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ż interfejs MediaStore
w celu uzyskiwania dostępu do plików multimedialnych z pamięci współdzielonej za pomocą bezpośrednich ścieżek do plików. Te interfejsy API
obejmują:
- Interfejs
File
API. - biblioteki natywne, np.
fopen()
;
Dostęp do danych z innych aplikacji
Aby chronić prywatność użytkowników, na urządzeniach 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 katalogach danych w pamięci wewnętrznej innym aplikacjom. Aplikacje kierowane na Androida 9 lub nowszego nie mogą udostępniać plików w katalogach danych.
Android 11 rozszerza to ograniczenie. Jeśli Twoja aplikacja jest kierowana na Androida 11, nie może uzyskać dostępu do plików w katalogu danych innej aplikacji, nawet jeśli ta aplikacja jest kierowana na Androida 8.1 (interfejs API na poziomie 27) lub starszego i udostępnia pliki w swoim katalogu danych do odczytu dla wszystkich.
Dostęp do katalogów aplikacji w pamięci zewnętrznej
Na Androidzie 11 aplikacje nie mogą już uzyskiwać dostępu do plików w żadnym innym dedykowanym katalogu aplikacji w pamięci zewnętrznej.
Ograniczenia dostępu do dokumentu
Aby dać deweloperom czas na testowanie, poniższe zmiany związane z platformą Storage Access Framework (SAF) zaczną obowiązywać tylko wtedy, gdy aplikacja będzie kierowana na Androida 11 lub nowszego.
Dostęp do katalogów
Nie możesz już używać działania związanego z intencją
ACTION_OPEN_DOCUMENT_TREE
do wysyłania próśb 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 przez większość czasu.
- Katalog
Download
.
Dostęp do plików
Nie możesz już używać działania intencji
ACTION_OPEN_DOCUMENT_TREE
ani
ACTION_OPEN_DOCUMENT
do żądania, aby użytkownik wybierał poszczególne pliki 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:
- Wywołaj intencję za pomocą działania
ACTION_OPEN_DOCUMENT
. Sprawdź, czy nie pojawiają się katalogiAndroid/data/
iAndroid/obb/
. - Wykonaj jedną z tych czynności:
- Włącz flagę zgodności aplikacji
RESTRICT_STORAGE_ACCESS_FRAMEWORK
. - kierować aplikację na Androida 11 lub nowszego;
- Włącz flagę zgodności aplikacji
- Wywołaj intencję za pomocą działania
ACTION_OPEN_DOCUMENT_TREE
. Sprawdź, czy wyświetla się katalogDownload
, a przycisk działania powiązany z katalogiem jest wyszarzony.
Uprawnienia
Android 11 wprowadza następujące zmiany związane z uprawnieniami do pamięci.
Kierowanie na dowolną wersję
READ_EXTERNAL_STORAGE
.Poniższe zmiany obowiązują w Androidzie 11 niezależnie od wersji pakietu SDK, na którą kierowana jest aplikacja:
- Uprawnienie środowiska wykonawczego Pamięć zostało zmienione na Pliki i multimedia.
Jeśli Twoja aplikacja nie zrezygnowała z pamięci o ograniczonym zakresie i wysyła żądanie uprawnień
READ_EXTERNAL_STORAGE
, użytkownicy zobaczą inne okno niż w Androidzie 10. Okno dialogowe 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 to uprawnienie, jest wymieniona w sekcji Zezwalaj na wszystkie pliki. Jeśli Twoja aplikacja jest kierowana na Androida 11, pamiętaj, że 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.
Docelowy Android 11
Jeśli Twoja aplikacja jest przeznaczona na Androida 11, zarówno uprawnienia WRITE_EXTERNAL_STORAGE
, jak i WRITE_MEDIA_STORAGE
nie zapewniają już dodatkowego dostępu.
Pamiętaj, że na urządzeniach z Androidem 10 (poziom interfejsu API 29) lub nowszym 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 pamięcią. 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 udostępniania plików innych niż multimedialne. Niektóre aplikacje mają jednak główny przypadek użycia, który wymaga szerokiego dostępu do plików na urządzeniu, ale nie mogą tego robić w efektywny sposób, korzystając ze sprawdzonych metod dotyczących pamięci, które dają użytkownikowi większą prywatność. W takich sytuacjach Android zapewnia specjalny dostęp do aplikacji o nazwie Dostęp do wszystkich plików. Więcej informacji znajdziesz w przewodniku na temat zarządzania wszystkimi plikami na urządzeniu pamięci masowej.
Dodatkowe materiały
Więcej informacji o zmianach w pamięci masowej w Androidzie 11 znajdziesz w tych materiałach: