Omówienie danych i miejsca na pliki

Android używa systemu plików podobnego do systemów plików opartych na dyskach na innych platformach. System udostępnia kilka opcji zapisywania danych aplikacji:

  • Pamięć wewnętrzna aplikacji: możesz przechowywać pliki, które są przeznaczone tylko do użytku Twojej aplikacji. Mogą znajdować się w specjalnych katalogach w pamięci wewnętrznej lub w innych dedykowanych katalogach w pamięci zewnętrznej. Korzystaj z katalogów w pamięci wewnętrznej, aby zapisywać informacje poufne, do których inne aplikacje nie powinny mieć dostępu.
  • Pamięć współdzielona: możesz przechowywać pliki, które aplikacja chce udostępnić innym aplikacjom, w tym multimedia, dokumenty i inne pliki.
  • Ustawienia: przechowuj prywatne dane podstawowe w parach klucz-wartość.
  • Bazy danych: przechowuj uporządkowane dane w prywatnej bazie danych za pomocą biblioteki trwałości sal.

Opis tych opcji znajdziesz w tej tabeli:

Typ treści Metoda dostępu Wymagane uprawnienia Czy inne aplikacje mają do niego dostęp? Pliki usuwane przy odinstalowaniu aplikacji?
Pliki aplikacji Pliki przeznaczone wyłącznie do użytku w aplikacji. Z pamięci wewnętrznej: getFilesDir() lub getCacheDir()

Z pamięci zewnętrznej: getExternalFilesDir() lub getExternalCacheDir()
Pamięć wewnętrzna nie jest potrzebna do korzystania z pamięci wewnętrznej

Nie jest potrzebna do korzystania z pamięci zewnętrznej, gdy aplikacja jest używana na urządzeniach z Androidem 4.4 (poziom interfejsu API 19) lub nowszym
Nie Tak
Multimedia Pliki multimedialne do udostępniania (obrazy, pliki audio, filmy) Interfejs API MediaStore READ_EXTERNAL_STORAGE podczas uzyskiwania dostępu do plików innych aplikacji na Androidzie 11 (poziom interfejsu API 30) lub nowszym

READ_EXTERNAL_STORAGE lub WRITE_EXTERNAL_STORAGE podczas uzyskiwania dostępu do plików innych aplikacji na Androidzie 10 (poziom interfejsu API 29)

Uprawnienia są wymagane w przypadku wszystkich plików na Androidzie 9 (poziom interfejsu API 28) lub niższym
Tak, ale druga aplikacja wymaga uprawnienia READ_EXTERNAL_STORAGE Nie
Dokumenty i inne pliki inne rodzaje treści, które można udostępniać, w tym pobrane pliki; Platforma dostępu do pamięci masowej Brak Tak, za pomocą systemowego selektora plików Nie
Ustawienia aplikacji Pary klucz-wartość Biblioteka ustawień jetpacka Brak Nie Tak
Baza danych Uporządkowane dane Biblioteka trwałości sale Brak Nie Tak

Wybrane rozwiązanie zależy od konkretnych potrzeb:

Ile miejsca wymagają dane?
W pamięci wewnętrznej jest ograniczone miejsce na dane aplikacji. Jeśli chcesz zaoszczędzić sporo danych, użyj innych typów pamięci masowej.
Jak niezawodny musi być dostęp do danych?
Jeśli podstawowe funkcje aplikacji wymagają określonych danych, na przykład informacji o tym, kiedy aplikacja się uruchamia, umieść dane w katalogu pamięci wewnętrznej lub w bazie danych. Pliki aplikacji przechowywane w pamięci zewnętrznej nie zawsze są dostępne, ponieważ niektóre urządzenia umożliwiają użytkownikom usunięcie fizycznego urządzenia powiązanego z zewnętrzną pamięcią.
Jakiego rodzaju dane chcesz przechowywać?
Jeśli masz dane, które są istotne tylko dla Twojej aplikacji, wykorzystaj miejsce na dane przeznaczone dla tej aplikacji. W przypadku treści multimedialnych, które możesz udostępniać, używaj pamięci współdzielonej, aby inne aplikacje miały do nich dostęp. W przypadku uporządkowanych danych użyj ustawień (w przypadku danych par klucz-wartość) lub bazy danych (w przypadku danych zawierających więcej niż 2 kolumny).
Czy dane powinny być prywatne?
Gdy przechowujesz dane wrażliwe, które nie powinny być dostępne w żadnej innej aplikacji, skorzystaj z pamięci wewnętrznej, ustawień lub bazy danych. Dodatkową zaletą pamięci wewnętrznej jest to, że dane są ukryte przed użytkownikami.

Kategorie lokalizacji przechowywania

Android zapewnia 2 rodzaje lokalizacji fizycznej pamięci: pamięć wewnętrzna i pamięć zewnętrzną. Na większości urządzeń pamięć wewnętrzna jest mniejsza niż pamięć zewnętrzna. Pamięć wewnętrzna jest jednak zawsze dostępna na wszystkich urządzeniach, dzięki czemu jest bardziej niezawodnym miejscem przechowywania danych zależnych od aplikacji.

Woluminy wymienne, takie jak karta SD, są wyświetlane w systemie plików jako część pamięci zewnętrznej. Android reprezentuje te urządzenia za pomocą ścieżki takiej jak /sdcard.

Same aplikacje są domyślnie przechowywane w pamięci wewnętrznej. Jeśli jednak rozmiar pliku APK jest bardzo duży, w pliku manifestu aplikacji możesz określić, że wolisz zainstalować aplikację w pamięci zewnętrznej:

<manifest ...
  android:installLocation="preferExternal">
  ...
</manifest>

Uprawnienia i dostęp do pamięci zewnętrznej

Android określa te uprawnienia związane z miejscem na dane: READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE i MANAGE_EXTERNAL_STORAGE.

We wcześniejszych wersjach Androida aplikacje musiały zadeklarować uprawnienie READ_EXTERNAL_STORAGE, aby uzyskać dostęp do plików znajdujących się w pamięci zewnętrznej spoza katalogów aplikacji. Oprócz tego aplikacje musiały zadeklarować uprawnienia WRITE_EXTERNAL_STORAGE do zapisu w dowolnym pliku spoza katalogu aplikacji.

W przypadku nowszych wersji Androida przy określaniu możliwości dostępu aplikacji do danego pliku i zapisywania w nim w większym stopniu polega przeznaczenie pliku, a nie jego lokalizacja. W szczególności, jeśli aplikacja jest kierowana na Androida 11 (poziom interfejsu API 30) lub nowszego, uprawnienie WRITE_EXTERNAL_STORAGE nie ma żadnego wpływu na dostęp aplikacji do pamięci. Ten model pamięci masowej oparty na celach zwiększa prywatność użytkownika, ponieważ aplikacje mają dostęp tylko do tych obszarów systemu plików urządzenia, z których faktycznie korzystają.

Android 11 wprowadza uprawnienie MANAGE_EXTERNAL_STORAGE, które zapewnia uprawnienia do zapisu plików spoza katalogu aplikacji i katalogu MediaStore. Aby dowiedzieć się więcej o tych uprawnieniach i o tym, dlaczego większość aplikacji nie musi ich deklarować, aby zrealizować swoje zastosowania, zapoznaj się z przewodnikiem po zarządzaniu wszystkimi plikami na urządzeniu pamięci masowej.

Ograniczone miejsce na dane

Aby zapewnić użytkownikom większą kontrolę nad plikami i ograniczyć ich ilość, aplikacje kierowane na Androida 10 (poziom interfejsu API 29) i nowsze wersje domyślnie otrzymują dostęp w zakresie do pamięci zewnętrznej, czyli ograniczonego miejsca na dane. Takie aplikacje mają dostęp tylko do odpowiedniego katalogu aplikacji w pamięci zewnętrznej oraz do określonych typów multimediów utworzonych przez aplikację.

korzystać z pamięci o zakresie, chyba że aplikacja potrzebuje dostępu do pliku zapisanego poza katalogiem dotyczącym aplikacji i poza katalogiem, do którego mają dostęp interfejsy API MediaStore. Jeśli przechowujesz pliki aplikacji w pamięci zewnętrznej, możesz ułatwić sobie korzystanie z pamięci zewnętrznej, umieszczając te pliki w katalogu aplikacji w pamięci zewnętrznej. Dzięki temu aplikacja zachowa do nich dostęp, gdy włączona jest pamięć o zakresie.

Aby przygotować aplikację do korzystania z pamięci ograniczonego, zapoznaj się z przewodnikiem po przypadkach użycia i sprawdzonych metodach korzystania z miejsca na dane. Jeśli Twoja aplikacja ma inny przypadek użycia, którego nie obejmuje miejsce na dane o zakresie, prześlij prośbę o dodanie funkcji. Możesz tymczasowo zrezygnować z używania ograniczonego miejsca na dane.

Wyświetlanie plików na urządzeniu

Aby wyświetlić pliki zapisane na urządzeniu, użyj eksploratora plików urządzenia w Android Studio.

Dodatkowe materiały

Więcej informacji o przechowywaniu danych znajdziesz w tych materiałach.

Filmy