Aktualizacje dotyczące miejsca na dane w Androidzie 11

Android 11 (poziom interfejsu API 30) jeszcze bardziej ulepsza platformę, zwiększając ochronę danych aplikacji i użytkowników w pamięci zewnętrznej. W tej wersji wprowadziliśmy kilka ulepszeń, takich jak dostęp do nieprzetworzonej ścieżki do pliku, operacje edycji zbiorczej multimediów i zaktualizowany interfejs platformy Storage Access Framework.

W tej wersji wprowadzono też ulepszenia dotyczące miejsca na dane o zakresie, które ułatwia deweloperom wykorzystanie miejsca na dane po przejściu na ten model.

Wymuszanie ograniczonego miejsca na dane

Aplikacje, które działają na Androidzie 11, ale są kierowane na Androida 10 (poziom interfejsu API 29), nadal mogą żądać atrybutu requestLegacyExternalStorage. Ta flaga pozwala aplikacjom tymczasowo zrezygnować 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.

Zachowywanie zgodności z Androidem 10

Jeśli Twoja aplikacja na urządzeniach z Androidem 10 nie korzysta z pamięci ograniczonego, zalecamy dalsze ustawianie wartości requestLegacyExternalStorage na true w pliku manifestu. Dzięki temu na urządzeniach z Androidem 10 aplikacja może działać zgodnie z oczekiwaniami.

Przenoszenie danych do katalogów, które są widoczne podczas korzystania z pamięci o ograniczonym zakresie

Jeśli Twoja aplikacja korzysta ze 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 pamięci o zakresie. Zanim ustawisz kierowanie na Androida 11, przenieś dane do katalogu zgodnego z miejscem na dane o zakresie.

Testuj miejsce na dane w zakresie

Aby włączyć w aplikacji pamięć o zakresie niezależnie od docelowych wersji pakietu SDK i flag pliku manifestu, włącz te flagi zgodności aplikacji:

Aby wyłączyć miejsce na dane o ograniczonym zakresie i użyć starszego modelu pamięci masowej, odznacz obie flagi.

Zarządzanie miejscem na urządzeniu

Począwszy od Androida 11 aplikacje, które używają modelu ograniczonego dostępu do pamięci masowej, mają dostęp tylko do własnych plików pamięci podręcznej właściwych dla aplikacji. Jeśli Twoja aplikacja musi zarządzać pamięcią urządzenia, wykonaj instrukcje wysyłania zapytań o wolne miejsce.

  1. Aby sprawdzić, czy masz wolne miejsce, wywołaj działanie intencji ACTION_MANAGE_STORAGE.
  2. 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. 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 dla aplikacji w pamięci zewnętrznej. Aby uzyskać dostęp do katalogu udostępnianego przez system dla Twojej aplikacji, wywołaj metodę getExternalFilesDirs().

Dostęp do plików multimedialnych

Aby ułatwić dostęp do multimediów przy jednoczesnym zachowaniu prywatności użytkownika, w Androidzie 11 wprowadziliśmy te funkcje.

Wykonywanie operacji wsadowych

Aby zapewnić spójność na różnych urządzeniach i zwiększyć wygodę użytkowników, Android 11 udostępnia kilka metod, które ułatwiają zarządzanie grupami plików multimedialnych.

uzyskiwać dostęp do plików za pomocą bezpośrednich ścieżek plików i bibliotek natywnych;

Aby Twoja aplikacja działała sprawniej z bibliotekami multimediów innych firm, Android 11 umożliwia używanie 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 plików. Te interfejsy API to między innymi:

  • 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 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 interfejsu 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 dostępnych na całym świecie.

W Androidzie 11 to ograniczenie się rozwija. Jeśli Twoja aplikacja jest kierowana na Androida 11, nie ma dostępu do plików w katalogu danych żadnej innej aplikacji, nawet jeśli ta aplikacja jest kierowana na Androida 8.1 (poziom interfejsu API 27) lub starszego i umożliwi czytanie plików w katalogu danych w całości.

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 specjalnym katalogu innych aplikacji w pamięci zewnętrznej.

Ograniczenia dostępu do dokumentu

Aby dać deweloperom czas na testy, poniższe zmiany związane z platformą Storage Access Framework (SAF) będą obowiązywać tylko w przypadku aplikacji na Androida 11 lub nowszego.

Dostęp do katalogów

Nie możesz już prosić o dostęp do tych katalogów: ACTION_OPEN_DOCUMENT_TREE:

  • Katalog główny woluminu pamięci wewnętrznej.
  • Katalog główny każdej karty SD, którą producent urządzenia uważa za niezawodny, niezależnie od tego, czy karta jest emulowana czy wyjmowana. Niezawodny wolumin to taki, z którego aplikacja może z łatwością korzystać przez większość czasu.
  • Katalog Download.

Dostęp do plików

Nie możesz już używać ACTION_OPEN_DOCUMENT_TREE ani intencji ACTION_OPEN_DOCUMENT, aby prosić użytkownika o wybranie pojedynczych 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:

  1. Wywołaj intencję za pomocą działania ACTION_OPEN_DOCUMENT. Sprawdź, czy katalogi Android/data/ i Android/obb/ się nie wyświetlają.
  2. Wykonaj jedną z tych czynności:
  3. Wywołaj intencję za pomocą działania ACTION_OPEN_DOCUMENT_TREE. Sprawdź, czy katalog Download jest widoczny, a powiązany z nim przycisk polecenia jest wyszarzony.

Uprawnienia

W Androidzie 11 wprowadziliśmy opisane poniżej zmiany związane z uprawnieniami do przechowywania danych.

Kierowanie na dowolną wersję

W pierwszym oknie znajduje się link „Zezwól” w ustawieniach.
Rysunek 1. Okno wyświetlane, gdy aplikacja korzysta z pamięci o ograniczonym zakresie i prosi o uprawnienie READ_EXTERNAL_STORAGE.

Te zmiany zostaną wprowadzone w Androidzie 11 niezależnie od docelowej wersji pakietu SDK aplikacji:

  • Uprawnienia środowiska wykonawczego Przechowywanie danych zostały zmienione na Pliki i multimedia.
  • Jeśli Twoja aplikacja nie zrezygnowała z ograniczonego miejsca na dane i prosi o uprawnienie READ_EXTERNAL_STORAGE, użytkownicy zobaczą inne okno niż na Androidzie 10. Okno wskazuje, że aplikacja prosi o dostęp do zdjęć i multimediów, jak widać na ilustracji 1.

    W ustawieniach systemu użytkownicy mogą sprawdzić, które aplikacje mają uprawnienie READ_EXTERNAL_STORAGE. Na stronie Ustawienia > Prywatność > Menedżer uprawnień > Pliki i multimedia każda aplikacja z uprawnieniami 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 za pomocą tej aplikacji odczytywać wszystkie pliki w pamięci współdzielonej i zapisywać je, 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 uprawnienie 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 pomagać w tworzeniu dobrze zdefiniowanych kolekcji multimediów, np. MediaStore.Downloads, bez wysyłania prośby o przyznanie uprawnień związanych z pamięcią. Dowiedz się więcej o tym, jak prosić o tylko 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, postępuj zgodnie ze sprawdzonymi metodami dotyczącymi udostępniania plików multimedialnych i udostępniania plików innych niż multimedialne. Niektóre aplikacje mają jednak podstawowy przypadek użycia, który wymaga szerokiego dostępu do plików na urządzeniu, ale nie jest w stanie tego robić zgodnie ze sprawdzonymi metodami zapewniania ochrony prywatności dotyczącymi miejsca na dane. W takich sytuacjach Android zapewnia aplikacjom specjalny dostęp o nazwie Dostęp do wszystkich plików. Więcej informacji znajdziesz w przewodniku 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:

Posty na blogu

Filmy