Android 11 (poziom interfejsu API 30) jeszcze bardziej ulepsza platformę, zapewniając lepszą ochronę danych aplikacji i użytkowników w pamięci zewnętrznej. Ta wersja wprowadza kilka ulepszeń, takich jak dostęp do nieprzetworzonej ścieżki pliku, operacje edycji grupowej multimediów i zaktualizowany interfejs Storage Access Framework.
W tej wersji wprowadziliśmy też ulepszenia wydzielonego 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ą żądać atrybutu requestLegacyExternalStorage. Ta flaga umożliwia aplikacjom tymczasowe wyłączenie 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 będzie ignorować flagę requestLegacyExternalStorage.
Utrzymywanie zgodności z Androidem 10
Jeśli aplikacja nie korzysta z ograniczonego dostępu do miejsca na dane na urządzeniach z Androidem 10, zalecamy dalsze ustawianie wartości requestLegacyExternalStorage na true w pliku manifestu aplikacji. Dzięki temu aplikacja będzie działać zgodnie z oczekiwaniami na urządzeniach z Androidem 10.
Przenoszenie danych do katalogów widocznych podczas korzystania z ograniczonego dostępu do miejsca na dane
Jeśli Twoja aplikacja korzysta ze starszego modelu pamięci masowej 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ć w aplikacji ograniczony dostęp do miejsca na dane, niezależnie od docelowej wersji pakietu SDK i wartości flagi pliku manifestu, włącz te flagi zgodności aplikacji:
DEFAULT_SCOPED_STORAGE(domyślnie włączone we wszystkich aplikacjach)FORCE_ENABLE_SCOPED_STORAGE(domyślnie wyłączone we wszystkich aplikacjach)
Aby wyłączyć ograniczony dostęp do miejsca na dane i używać starszego modelu pamięci, wyłącz obie flagi.
Zarządzanie miejscem na urządzeniu
Od Androida 11 aplikacje, które używają modelu ograniczonego dostępu do miejsca na dane, mają dostęp tylko do własnych plików pamięci podręcznej. Jeśli aplikacja musi zarządzać pamięcią urządzenia, postępuj zgodnie z instrukcjami dotyczącymi sprawdzania wolnego miejsca.
- Sprawdź ilość wolnego miejsca, wywołując działanie intencji
ACTION_MANAGE_STORAGE. Jeśli na urządzeniu nie ma wystarczającej ilości wolnego miejsca, poproś użytkownika o zgodę na wyczyszczenie wszystkich pamięci podręcznych przez 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 w pamięci zewnętrznej. Aby uzyskać dostęp do katalogu, który system udostępnia aplikacji, wywołaj 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 wsadowych
Aby zapewnić spójność na różnych urządzeniach i zwiększyć wygodę użytkowników, Android 11 dodaje kilka metod, które ułatwiają zarządzanie grupami plików multimedialnych.
Uzyskiwanie dostępu do plików za pomocą bezpośrednich ścieżek i bibliotek natywnych
Aby ułatwić płynne działanie aplikacji z bibliotekami multimediów innych firm, Android 11 umożliwia korzystanie z interfejsów API innych niż MediaStore w celu uzyskiwania dostępu do plików multimedialnych z pamięci współdzielonej za pomocą bezpośrednich ścieżek do plików. Należą do nich:
- Interfejs API
File. - biblioteki natywne, takie jak
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 (interfejs API na poziomie 28) zaczął ograniczać aplikacje, które 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 wszystkim użytkownikom.
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 żadnej innej aplikacji, nawet jeśli ta inna aplikacja jest kierowana na Androida 8.1 (poziom interfejsu API 27) lub starszego i udostępniła pliki w swoim katalogu danych do odczytu dla wszystkich.
Dostęp do katalogów aplikacji w pamięci zewnętrznej
W Androidzie 11 aplikacje nie mają już dostępu do plików w żadnym dedykowanym katalogu innej aplikacji w pamięci zewnętrznej.
Ograniczenia dostępu do dokumentów
Aby dać deweloperom czas na testowanie, poniższe zmiany związane z platformą dostępu do pamięci (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 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 wymienna. 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, 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ę działania:
- Wywołaj intencję za pomocą działania
ACTION_OPEN_DOCUMENT. Sprawdź, czy nie są widoczne katalogiAndroid/data/iAndroid/obb/. - Wykonaj jedną z tych czynności:
- Włącz flagę zgodności aplikacji
RESTRICT_STORAGE_ACCESS_FRAMEWORK. - być kierowana na Androida 11 lub nowszego;
- Włącz flagę zgodności aplikacji
- Wywołaj intencję za pomocą działania
ACTION_OPEN_DOCUMENT_TREE. Sprawdź, czy katalogDownloadjest widoczny, a przycisk polecenia powiązany z katalogiem jest wyszarzony.
Uprawnienia
Android 11 wprowadza te zmiany związane z uprawnieniami do pamięci.
Kierowanie na dowolną wersję
READ_EXTERNAL_STORAGE.W Androidzie 11 wprowadziliśmy te zmiany, które obowiązują niezależnie od docelowej wersji pakietu SDK aplikacji:
- Uprawnienia w czasie działania aplikacji dotyczące pamięci zostały przemianowane na Pliki i multimedia.
Jeśli Twoja aplikacja nie zrezygnowała z ograniczonego dostępu do miejsca na dane i prosi o uprawnienie
READ_EXTERNAL_STORAGE, użytkownicy zobaczą inne okno niż w Androidzie 10. Okno dialogowe wskazuje, że aplikacja prosi o dostęp do zdjęć i multimediów, jak pokazano na rysunku 1.Użytkownicy mogą sprawdzić w ustawieniach systemu, które aplikacje mają uprawnienie
READ_EXTERNAL_STORAGE. Na stronie Ustawienia > Prywatność > Menedżer uprawnień > Pliki i multimedia każda aplikacja, która ma uprawnienia, jest wymieniona w sekcji Dostęp do wszystkich plików. Jeśli 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.
Kierowanie na Androida 11
Jeśli aplikacja jest kierowana na Androida 11, uprawnienia WRITE_EXTERNAL_STORAGE i uprzywilejowane uprawnienia WRITE_MEDIA_STORAGE nie zapewniają już żadnego dodatkowego dostępu.
Pamiętaj, że na urządzeniach z Androidem 10 (poziom interfejsu API 29) lub nowszym aplikacja może dodawać pliki 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
W przypadku większości aplikacji, które wymagają dostępu do pamięci współdzielonej, można stosować sprawdzone metody udostępniania plików multimedialnych i udostępniania plików innych niż multimedialne. Jednak w przypadku niektórych aplikacji główny przypadek użycia wymaga szerokiego dostępu do plików na urządzeniu, ale nie można go efektywnie zrealizować przy użyciu sprawdzonych metod dotyczących pamięci, które sprzyjają prywatności. W takich sytuacjach Android udostępnia specjalne uprawnienie 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 dotyczących pamięci w Androidzie 11 znajdziesz w tych materiałach: