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. W tej wersji wprowadziliśmy kilka ulepszeń, takich jak dostęp do nieprzetworzonych plików ścieżki, operacje edycji zbiorczej multimediów oraz zaktualizowany interfejs Storage Access Framework.
Ta wersja zawiera też ulepszenia dotyczące ograniczonego miejsca na dane, co ułatwia deweloperom wykorzystanie przypadków użycia miejsca na dane po przejściu na ten model miejsca na dane.
Egzekwowanie limitu miejsca na dane
Aplikacje działające na Androidzie 11, ale kierowane na Androida 10 (poziom interfejsu API 29), nadal mogą prosić o atrybut requestLegacyExternalStorage
. Ta flaga umożliwia aplikacjom tymczasowe zrezygnowanie ze 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. Gdy zaktualizujesz aplikację, aby była kierowana na Androida 11, system zignoruje flagę requestLegacyExternalStorage
.
Zgodność z Androidem 10
Jeśli Twoja aplikacja działa na urządzeniach z Androidem 10 i wyłącza opcję korzystania z pamięci zakresu, zalecamy dalsze ustawienie opcji requestLegacyExternalStorage
na true
w pliku manifestu aplikacji. Dzięki temu aplikacja może działać zgodnie z oczekiwaniami na urządzeniach z Androidem 10.
Przeprowadź migrację danych do katalogów, które są widoczne, gdy korzystasz z pamięci zakresu
Jeśli Twoja aplikacja używa starszego modelu pamięci masowej i była wcześniej kierowana na Androida 10 lub starszego, dane mogą być przechowywane w katalogu, do którego aplikacja nie ma dostępu, gdy włączony jest model ograniczonego miejsca na dane. Zanim ustawisz kierowanie na Androida 11, przenieś dane do katalogu zgodnego z pamięcią zakresu.
Testuj pamięć w zakresie
Aby włączyć w swojej aplikacji ograniczone miejsce na dane (niezależnie od docelowej wersji pakietu SDK i wartości flag pliku manifestu), włącz te flagi zgodności aplikacji:
DEFAULT_SCOPED_STORAGE
(domyślnie włączona w przypadku wszystkich aplikacji)FORCE_ENABLE_SCOPED_STORAGE
(domyślnie wyłączony dla wszystkich aplikacji)
Aby wyłączyć miejsce na dane o ograniczonym zakresie i zamiast tego korzystać ze starszego modelu przechowywania danych, wyłącz obie flagi.
Zarządzanie miejscem na urządzeniu
Począwszy od Androida 11 aplikacje korzystające z modelu ograniczonego miejsca na dane mają dostęp tylko do plików pamięci podręcznej swoich aplikacji. Jeśli Twoja aplikacja musi zarządzać pamięcią urządzenia, postępuj zgodnie z instrukcjami wysyłania zapytań o wolne miejsce.
- Sprawdź, czy jest wolne miejsce, wywołując działanie intencji
ACTION_MANAGE_STORAGE
. Jeśli na urządzeniu nie ma wystarczająco dużo 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 przeznaczonego do aplikacji w pamięci zewnętrznej. Aby uzyskać dostęp do katalogu udostępnianego przez system Twojej aplikacji, wywołaj getExternalFilesDirs()
.
Dostęp do plików multimedialnych
Aby ułatwić dostęp do multimediów i zachować prywatność użytkownika, Android 11 dodaje te funkcje.
Wykonywanie operacji wsadowych
Aby zapewnić spójność między urządzeniami i wygodę użytkowników, Android 11 dodaje kilka metod, które ułatwiają zarządzanie grupami plików multimedialnych.
Dostęp do plików za pomocą bezpośrednich ścieżek do plików i bibliotek natywnych
Aby zapewnić płynniejsze działanie aplikacji z bibliotekami multimediów innych firm, Android 11 umożliwia korzystanie z interfejsów API innych niż MediaStore
API do uzyskiwania dostępu do plików multimedialnych z pamięci współdzielonej za pomocą bezpośrednich ścieżek do plików. Te interfejsy API to:
- interfejs API
File
, - 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 jeszcze bardziej ogranicza dostęp aplikacji do katalogów prywatnych innych aplikacji.
Dostęp do katalogów danych w pamięci wewnętrznej
Android 9 (poziom interfejsu API 28) zaczął ograniczać możliwość udostępniania plików na całym świecie do plików 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 jako dostępnych z całego świata.
To ograniczenie jest rozszerzane na Androida 11. Jeśli Twoja aplikacja jest kierowana na Androida 11, nie będzie miała dostępu do plików w katalogu danych innej aplikacji, nawet jeśli jest kierowana na Androida 8.1 (poziom interfejsu API 27) lub niższy i udostępniła pliki w katalogu danych w całym świecie.
Dostęp do katalogów aplikacji w pamięci zewnętrznej
Na Androidzie 11 aplikacje nie mają już dostępu do plików w żadnym katalogu dla określonej aplikacji w pamięci zewnętrznej.
Ograniczenia dostępu do dokumentów
Aby dać deweloperom czas na testy, poniższe zmiany związane z platformą Storage Access Framework (SAF) zostaną zastosowane tylko w przypadku aplikacji kierowanych na Androida 11 lub nowszego.
Dostęp do katalogów
Nie możesz już korzystać z działania intencji ACTION_OPEN_DOCUMENT_TREE
, aby poprosić o dostęp do tych katalogów:
- Katalog główny woluminu pamięci wewnętrznej.
- Katalog główny woluminu karty SD, który producent urządzenia uznaje za niezawodny, bez względu na to, czy karta jest emulowana czy wyjmowana. Niezawodny wolumin to taki, do którego aplikacja ma zazwyczaj dostęp przez większość czasu.
- Katalog
Download
.
Dostęp do plików
Nie możesz już używać działania ACTION_OPEN_DOCUMENT_TREE
ani ACTION_OPEN_DOCUMENT
intencji, aby poprosić 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, wykonaj te czynności:
- Wywołaj intencję za pomocą działania
ACTION_OPEN_DOCUMENT
. Sprawdź, czy nie ma katalogówAndroid/data/
iAndroid/obb/
. - Wykonaj jedną z tych czynności:
- Włącz flagę zgodności aplikacji
RESTRICT_STORAGE_ACCESS_FRAMEWORK
. - Kieruj reklamy 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 polecenia powiązany z katalogiem jest wyszarzony.
Uprawnienia
Android 11 wprowadza poniższe zmiany związane z uprawnieniami do przechowywania danych.
Kieruj na dowolną wersję
W Androidzie 11 obowiązują te zmiany niezależnie od docelowej wersji pakietu SDK aplikacji:
- Nazwa uprawnienia w czasie działania Pamięć wewnętrzna została zmieniona na Pliki i multimedia.
Jeśli Twoja aplikacja nie zrezygnowała z ograniczonego miejsca na dane i poprosi o uprawnienie
READ_EXTERNAL_STORAGE
, użytkownicy zobaczą inne okno dialogowe niż Android 10. Okno dialogowe wskazuje, że aplikacja prosi o dostęp do zdjęć i multimediów, jak widać na rys. 1.Użytkownicy mogą sprawdzić, które aplikacje mają uprawnienie
READ_EXTERNAL_STORAGE
, w ustawieniach systemu. Na stronie Ustawienia > Prywatność > Menedżer uprawnień > Pliki i multimedia każda aplikacja, która ma odpowiednie uprawnienia, jest wymieniona w sekcji Dozwolone w przypadku 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 móc odczytywać i zapis we wszystkich plikach w pamięci współdzielonej za pomocą tej aplikacji, musisz mieć uprawnienie dostęp do wszystkich plików.
Kierowanie na Androida 11
Jeśli Twoja aplikacja jest kierowana na Androida 11, zarówno uprawnienie WRITE_EXTERNAL_STORAGE
, jak i WRITE_MEDIA_STORAGE
z podwyższonymi uprawnieniami nie zapewnia już żadnego dodatkowego dostępu.
Pamiętaj, że na urządzeniach z Androidem 10 (poziom interfejsu API 29) lub nowszym aplikacja może współtworzyć dobrze zdefiniowane kolekcje multimediów, np. MediaStore.Downloads
, bez konieczności żądania uprawnień związanych z miejscem na dane. Dowiedz się więcej o tym, jak podczas pracy z plikami multimedialnymi w aplikacji wymagać tylko niezbędnych uprawnień.
Dostęp do wszystkich plików
Większość aplikacji, które wymagają dostępu do pamięci współdzielonej, jest zgodna ze sprawdzonymi metodami udostępniania plików multimedialnych i plików innych niż multimedialne. Część aplikacji jest jednak w głównych przypadkach użycia wymagających szerokiego dostępu do plików na urządzeniu, ale nie jest to możliwe wydajnie z wykorzystaniem sprawdzonych metod dotyczących przechowywania danych zapewniających ochronę prywatności. W takich sytuacjach Android zapewnia specjalny dostęp do aplikacji o nazwie Dostęp do wszystkich plików. Więcej informacji znajdziesz w przewodniku dotyczącym zarządzania wszystkimi plikami na urządzeniu pamięci masowej.
Dodatkowe materiały
Więcej informacji o zmianach dotyczących miejsca na dane w Androidzie 11 znajdziesz w tych materiałach: