Android 11 (poziom interfejsu API 30) jeszcze bardziej ulepsza platformę, zapewniając lepszą ochronę danych aplikacji i użytkowników na zewnętrznym urządzeniu pamięci masowej. Ta wersja wprowadza kilka ulepszeń, takich jak dostęp do ścieżki pliku w postaci binarnej, operacje zbiorczej edycji multimediów i zaktualizowany interfejs Storage Access Framework.
Ta wersja zawiera też ulepszenia ograniczonego miejsca na dane, które ułatwiają deweloperom realizację użytków z miejsca na dane po przejściu na ten model.
Egzekwowanie ograniczonego miejsca na dane
Aplikacje, które działają na Androidzie 11, ale są kierowane na Androida 10 (poziom interfejsu API 29), nadal mogą prosić o atrybut requestLegacyExternalStorage
. Ten parametr umożliwia aplikacjom tymczasowe wyłączenie się z zmian związanych z ograniczonym dostępem do pamięci, takich jak przyznawanie dostępu do różnych katalogów i różnych typów plików multimedialnych. Po zaktualizowaniu aplikacji do wersji kierowanej na Androida 11 system zignoruje flagę requestLegacyExternalStorage
.
Utrzymywanie zgodności z Androidem 10
Jeśli Twoja aplikacja nie korzysta z ograniczonego miejsca na dane podczas działania na urządzeniach z Androidem 10, zalecamy, aby w pliku manifestu aplikacji ustawienie requestLegacyExternalStorage
było nadal ustawione na true
. 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 miejsca na dane
Jeśli Twoja aplikacja używa starszego modelu pamięci i wcześniej kierowana była na Androida 10 lub niższą wersję, możesz przechowywać dane w katalogu, do którego aplikacja nie ma dostępu, gdy włączony jest model ograniczonego miejsca na dane. Zanim zaczniesz kierować aplikację na Androida 11, przenieś dane do katalogu zgodnego z ograniczonym miejscem na dane.
Testowanie ograniczonego dostępu do miejsca na dane
Aby włączyć ograniczoną pamięć w aplikacji, 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 dla wszystkich aplikacji)FORCE_ENABLE_SCOPED_STORAGE
(domyślnie wyłączone dla wszystkich aplikacji)
Aby wyłączyć ograniczoną pamięć i zamiast niej użyć starszego modelu pamięci, usuń oba flagi.
Zarządzanie miejscem na urządzeniu
Od Androida 11 aplikacje korzystające z modelu ograniczonego 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 wyszukiwania wolnego miejsca.
- Sprawdź, czy jest dostępne miejsce, wywołując działanie intencji
ACTION_MANAGE_STORAGE
. Jeśli na urządzeniu jest za mało wolnego miejsca, poproś użytkownika o zgodę na wyczyszczenie całej pamięci podręcznej. Aby to zrobić, wywołaj działanie intencyjne
ACTION_CLEAR_APP_CACHE
.
Katalog aplikacji na pamięci zewnętrznej
Począwszy od Androida 11 aplikacje nie mogą tworzyć własnych katalogów na dysku zewnętrznym. Aby uzyskać dostęp do katalogu udostępnianego przez system dla Twojej 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 oferuje te funkcje:
Wykonywanie operacji zbiorczych
Aby zapewnić spójność na różnych urządzeniach i większy komfort użytkowników, Android 11 wprowadza kilka metod ułatwiających zarządzanie grupami plików multimedialnych.
uzyskiwać dostęp do plików za pomocą bezpośrednich ścieżek plików 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ż interfejs MediaStore
do uzyskiwania dostępu do plików multimedialnych ze współdzielonej pamięci masowej za pomocą bezpośrednich ścieżek plików. Te interfejsy API to:
- 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 jeszcze bardziej ogranicza dostęp aplikacji do prywatnych katalogów innych aplikacji.
Dostęp do katalogów danych w pamięci wewnętrznej
W Androidzie 9 (poziom API 28) zaczęto ograniczać dostęp aplikacji do plików w katalogach danych na wewnętrznej pamięci masowej, aby inne aplikacje nie mogły ich odczytać. Aplikacje kierowane na Androida 9 lub nowszego nie mogą udostępniać pliki 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 inna aplikacja jest kierowana na Androida 8.1 (poziom interfejsu API 27) lub niższego i ma pliki w katalogu danych ustawione jako dostępne do odczytu przez wszystkich.
Dostęp do katalogów aplikacji na dysku zewnętrznym
W Androidzie 11 aplikacje nie mogą już uzyskiwać dostępu do plików w żadnym specjalnym katalogu innej aplikacji w pamięci zewnętrznej.
Ograniczenia dostępu do dokumentów
Aby dać deweloperom czas na przetestowanie, podane niżej zmiany związane z ramami 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 intencyjnego ACTION_OPEN_DOCUMENT_TREE
do żądania dostępu do tych katalogów:
- Katalog główny woluminu pamięci wewnętrznej.
- Katalog główny każdej karty SD, którą producent urządzenia uznaje za wiarygodną, niezależnie od tego, czy karta jest emulowana, czy wymienna. Wolumin niezawodny 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 intencyjnego ACTION_OPEN_DOCUMENT_TREE
ani ACTION_OPEN_DOCUMENT
, 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ę zachowania, wykonaj te czynności:
- Wywołaj intencję z działaniem
ACTION_OPEN_DOCUMENT
. Sprawdź, czy katalogiAndroid/data/
iAndroid/obb/
nie są widoczne. - 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ę z działaniem
ACTION_OPEN_DOCUMENT_TREE
. Sprawdź, czy wyświetla się katalogDownload
, a przycisk działania powiązany z tym katalogiem jest wyszarzony.
Uprawnienia
Android 11 wprowadza następujące zmiany dotyczące uprawnień do dostępu do pamięci:
Kierowanie na dowolną wersję
Na Androidzie 11 wchodzą w życie te zmiany, niezależnie od wersji docelowego pakietu SDK aplikacji:
- Uprawnienie Pamięć zostało zmienione na Pliki i multimedia.
Jeśli Twoja aplikacja nie wyklucza się z ograniczonego miejsca na dane i prosi o uprawnienia
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 (patrz rys. 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 dane uprawnienie, jest wymieniona w sekcji Dozwolone dla wszystkich plików. Jeśli Twoja aplikacja jest kierowana na Androida 11, pamiętaj, że dostęp do „wszystkich plików” jest ograniczony do odczytu. Aby odczytywać i zapisywać wszystkie pliki w wspólnej pamięci masowej za pomocą tej aplikacji, musisz mieć uprawnienia dostępu do wszystkich plików.
Docelowy Android 11
Jeśli Twoja aplikacja jest kierowana na Androida 11, uprawnienia WRITE_EXTERNAL_STORAGE
i 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 Twoja aplikacja może dodawać treści do dobrze zdefiniowanych kolekcji multimediów, takich jak MediaStore.Downloads
, bez konieczności żądania żadnych uprawnień związanych z pamięcią. Dowiedz się więcej o tym, jak prosić tylko o konieczne uprawnienia podczas pracy z plikami multimedialnymi w aplikacji.
Dostęp do wszystkich plików
Większość aplikacji, które wymagają dostępu do udostępnionego miejsca na dane, może stosować sprawdzone metody udostępniania plików multimedialnych i udostępniania plików niemultimedialnych. 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ć skutecznie, korzystając ze 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 Zarządzanie wszystkimi plikami na urządzeniu pamięci masowej.
Dodatkowe materiały
Więcej informacji o zmianach w miejscu na dane w Androidzie 11 znajdziesz w tych materiałach: