Aktualizacje miejsca na dane w Androidzie 11

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:

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.

  1. Sprawdź ilość wolnego miejsca, wywołując działanie intencji ACTION_MANAGE_STORAGE.
  2. 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:

  1. Wywołaj intencję za pomocą działania ACTION_OPEN_DOCUMENT. Sprawdź, czy nie pojawiają się katalogi Android/data/Android/obb/.
  2. Wykonaj jedną z tych czynności:
  3. Wywołaj intencję za pomocą działania ACTION_OPEN_DOCUMENT_TREE. Sprawdź, czy wyświetla się katalog Download, 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ę

W pierwszym oknie pojawi się link Zezwól w ustawieniach.
Rysunek 1. Okno dialogowe wyświetlane, gdy aplikacja korzysta z ograniczonego dostępu do miejsca na dane i żąda uprawnień z grupy 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 multimedialnychudostę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:

Posty na blogu

Filmy