Omówienie danych i miejsca na pliki

Android używa systemu plików podobnego do opartych na dyskach systemów plików 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 Twojej aplikacji, w dedykowanych katalogach w pamięci wewnętrznej lub w różnych specjalnych katalogach w pamięci zewnętrznej. Skorzystaj z katalogów w pamięci wewnętrznej, aby zapisać informacje poufne, do których inne aplikacje nie powinny mieć dostępu.
  • Pamięć współdzielona: umożliwia przechowywanie plików, które Twoja aplikacja ma udostępniać innym aplikacjom, w tym multimediów, dokumentów i innych plików.
  • Preferencje: przechowywanie prywatnych, podstawowych danych w parach klucz-wartość.
  • Bazy danych: możesz przechowywać uporządkowane dane w prywatnej bazie danych, korzystając z biblioteki trwałości sal.

Podsumowanie cech tych opcji znajduje się w poniższej tabeli:

Typ treści Metoda dostępu Wymagane uprawnienia Czy inne aplikacje mają dostęp? Pliki usunięte podczas odinstalowywania aplikacji?
Pliki dotyczące aplikacji Pliki przeznaczone wyłącznie do użytku w Twojej aplikacji Z pamięci wewnętrznej, getFilesDir() lub getCacheDir()

Z pamięci zewnętrznej, getExternalFilesDir() lub getExternalCacheDir()
Nigdy nie jest potrzebna dla 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, które można udostępniać (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 urządzeniu z Androidem 10 (poziom interfejsu API 29)

Wymagane są uprawnienia dotyczące wszystkich plików na Androidzie 9 (poziom interfejsu API 28) lub niższym
Tak, ale druga aplikacja wymaga uprawnień 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 pokoju Brak Nie Tak

Wybór rozwiązania zależy od Twoich konkretnych potrzeb:

Ile miejsca potrzebują Twoje dane?
W pamięci wewnętrznej jest ograniczona ilość miejsca na dane aplikacji. Jeśli chcesz zaoszczędzić znaczną ilość danych, wybierz inne rodzaje miejsca na dane.
Jak niezawodny musi być dostęp do danych?
Jeśli podstawowe funkcje aplikacji wymagają pewnych danych, na przykład podczas uruchamiania aplikacji, umieść je 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 odpowiadającego pamięci zewnętrznej.
Jakiego rodzaju dane chcesz przechowywać?
Jeśli masz dane, które są istotne tylko dla Twojej aplikacji, wykorzystaj miejsce na dane aplikacji. W przypadku treści multimedialnych, które można udostępniać, używaj pamięci współdzielonej, aby inne aplikacje miały do nich dostęp. W przypadku uporządkowanych danych użyj preferencji (w przypadku par klucz-wartość) lub bazy danych (w przypadku danych zawierających więcej niż 2 kolumny).
Czy dane aplikacji powinny być prywatne?
Jeśli przechowujesz dane wrażliwe – takie, które nie powinny być dostępne w żadnej innej aplikacji – użyj pamięci wewnętrznej, ustawień lub bazy danych. Pamięć wewnętrzna ma dodatkową zaletę: dane są niewidoczne dla użytkowników.

Kategorie lokalizacji przechowywania

Android udostępnia 2 rodzaje lokalizacji pamięci fizycznej: pamięć wewnętrzna i pamięć zewnętrzna. 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 to bardziej niezawodne miejsce do przechowywania danych, w przypadku których potrzebna jest aplikacja.

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, np. /sdcard.

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

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

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

Android definiuje te uprawnienia związane z pamięcią: 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 spoza katalogów aplikacji w pamięci zewnętrznej. Oprócz tego aplikacje muszą zadeklarować uprawnienia WRITE_EXTERNAL_STORAGE do zapisu w dowolnym pliku spoza katalogu danej aplikacji.

W nowszych wersjach Androida przy określaniu możliwości dostępu aplikacji do danego pliku i zapisywania w nim większe znaczenie ma 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 oparty na konkretnym przeznaczeniu zwiększa prywatność użytkowników, ponieważ aplikacje otrzymują dostęp tylko do tych obszarów systemu plików, z których faktycznie korzystają.

Android 11 wprowadza uprawnienie MANAGE_EXTERNAL_STORAGE, które zapewnia uprawnienia do zapisu plików spoza katalogu aplikacji i elementu MediaStore. Więcej informacji o tym uprawnieniu i przyczynach, dla których większość aplikacji nie musi go deklarować w celu realizacji swoich przypadków użycia, znajdziesz w przewodniku zarządzania wszystkimi plikami na urządzeniu pamięci masowej.

Ograniczone miejsce na dane

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

Używaj ograniczonego miejsca na dane, chyba że aplikacja potrzebuje dostępu do pliku przechowywanego poza katalogiem dla danej 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 o określonym zakresie, umieszczając je w katalogu dla aplikacji w pamięci zewnętrznej. Dzięki temu aplikacja zachowa dostęp do tych plików, gdy włączony jest zakres pamięci masowej.

Aby przygotować aplikację do korzystania z ograniczonego miejsca na dane, zapoznaj się z przewodnikiem po przypadkach użycia i sprawdzonych metodach dotyczących miejsca na dane. Jeśli Twoja aplikacja ma inny przypadek użycia, który nie jest objęty zakresem pamięci masowej, prześlij prośbę o dodanie funkcji. Możesz tymczasowo zrezygnować z korzystania z 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