Omówienie danych i miejsca na pliki

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

  • Pamięć aplikacji: przechowuj pliki przeznaczone do użytku tylko przez aplikację w dedykowanych katalogach w pamięci wewnętrznej lub w innych dedykowanych katalogach w pamięci zewnętrznej. Używaj katalogów w pamięci wewnętrznej do zapisywania informacji poufnych, do których inne aplikacje nie powinny mieć dostępu.
  • Pamięć współdzielona: przechowuj pliki, które aplikacja ma udostępniać innym aplikacjom, w tym multimedia, dokumenty i inne pliki.
  • Ustawienia: przechowuj prywatne, podstawowe dane w parach klucz-wartość.
  • Bazy danych: przechowuj dane strukturalne w prywatnej bazie danych za pomocą biblioteki trwałości danych Room.

Cechy tych opcji podsumowano w tej tabeli:

Typ treści Metoda dostępu Wymagane uprawnienia Czy inne aplikacje mają dostęp? Czy pliki są usuwane po odinstalowaniu aplikacji?
Pliki powiązane z aplikacją Pliki przeznaczone do użytku tylko przez Twoją aplikację Z pamięci wewnętrznej: getFilesDir() lub getCacheDir()

Z pamięci zewnętrznej: getExternalFilesDir() lub getExternalCacheDir()
Nigdy nie jest wymagane w przypadku pamięci wewnętrznej

Nie jest wymagane w przypadku pamięci zewnętrznej, gdy aplikacja jest używana na urządzeniach z Androidem 4.4 (API na poziomie 19) lub nowszym
Nie Tak
Media pliki multimedialne, które można udostępniać (obrazy, pliki audio, filmy); MediaStore interfejs API READ_EXTERNAL_STORAGE podczas uzyskiwania dostępu do plików innych aplikacji na Androidzie 11 (poziom API 30) lub nowszym

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

Uprawnienia są wymagane w przypadku wszystkich plików na Androidzie 9 (poziom API 28) lub starszym
Tak, ale druga aplikacja musi mieć uprawnienie READ_EXTERNAL_STORAGE Nie
Dokumenty i inne pliki inne typy treści, które można udostępniać, w tym pobrane pliki. Storage Access Framework Brak Tak, za pomocą okna wyboru plików systemowych Nie
Ustawienia aplikacji Pary klucz–wartość Biblioteka Jetpack Preferences Brak Nie Tak
Lokalna baza danych Uporządkowane dane relacyjne na urządzeniu Biblioteka trwałości danych Room 1 Brak Nie Tak
Bazy danych hostowane w chmurze Dane synchronizowane na wielu urządzeniach, współpraca w czasie rzeczywistym Cloud Firestore, Firebase SQL Connect INTERNET Używanie tylko backendu w chmurze Pamięć podręczna pakietu SDK zostanie usunięta, ale dane w chmurze pozostaną.
Magazyn obiektów hostowany w chmurze nieuporządkowane dane (takie jak multimedia, duże pliki lub kopie zapasowe); Cloud Storage dla Firebase INTERNET Używanie tylko backendu w chmurze Pamięć podręczna pakietu SDK zostanie usunięta, ale dane w chmurze pozostaną.

1 Aby zsynchronizować lokalne bazy danych Room na różnych urządzeniach, sparuj Room z backendem w chmurze lub rozważ zarządzane rozwiązania do synchronizacji, takie jak Firebase.

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

Ile miejsca potrzebują Twoje dane?
W pamięci wewnętrznej jest ograniczona ilość miejsca na dane aplikacji. Jeśli chcesz zapisać dużą ilość danych, użyj innych typów pamięci.
Jak niezawodny musi być dostęp do danych?
Jeśli podstawowe funkcje aplikacji wymagają określonych danych, np. podczas uruchamiania aplikacji, umieść te 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 urządzenia fizycznego, które odpowiada pamięci zewnętrznej.
Jakie dane chcesz przechowywać?
Jeśli masz dane, które są istotne tylko dla Twojej aplikacji, użyj pamięci 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 danych strukturalnych używaj ustawień (dane klucz-wartość) lub bazy danych (dane zawierające więcej niż 2 kolumny).
Czy dane powinny być prywatne dla Twojej aplikacji?
Do przechowywania danych wrażliwych, które nie powinny być dostępne dla innych aplikacji, używaj pamięci wewnętrznej, preferencji lub bazy danych. Dodatkową zaletą pamięci wewnętrznej jest to, że dane są ukryte przed użytkownikami.

Kategorie lokalizacji miejsca na dane

Android udostępnia 2 rodzaje fizycznych lokalizacji pamięci: pamięć wewnętrzną i pamięć zewnętrzną. Na większości urządzeń pamięć wewnętrzna jest mniejsza niż zewnętrzna. Pamięć wewnętrzna jest jednak zawsze dostępna na wszystkich urządzeniach, dzięki czemu jest bardziej niezawodnym miejscem do przechowywania danych, od których zależy aplikacja.

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

Domyślnie aplikacje są przechowywane w pamięci wewnętrznej. Jeśli jednak rozmiar pliku APK jest bardzo duży, możesz w pliku manifestu aplikacji wskazać, że preferujesz instalację aplikacji 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 deklarować uprawnienie READ_EXTERNAL_STORAGE, aby uzyskać dostęp do dowolnego pliku poza katalogami aplikacji w pamięci zewnętrznej. Aplikacje musiały też deklarować uprawnienie WRITE_EXTERNAL_STORAGE, aby zapisywać dane w dowolnym pliku poza katalogiem aplikacji.

Nowsze wersje Androida bardziej polegają na przeznaczeniu pliku niż na jego lokalizacji, aby określić, czy aplikacja może uzyskać dostęp do danego pliku i go zapisać. Jeśli aplikacja jest kierowana na Androida 11 (API na poziomie 30) lub nowszego, uprawnienie WRITE_EXTERNAL_STORAGE nie ma wpływu na dostęp aplikacji do pamięci. Ten model pamięci masowej oparty na celu poprawia prywatność użytkowników, ponieważ aplikacje mają dostęp tylko do tych obszarów systemu plików urządzenia, których faktycznie używają.

W Androidzie 11 wprowadziliśmy uprawnienie MANAGE_EXTERNAL_STORAGE, które umożliwia zapisywanie plików poza katalogiem aplikacji i MediaStore. Aby dowiedzieć się więcej o tym uprawnieniu i o tym, dlaczego większość aplikacji nie musi go deklarować, aby realizować swoje przypadki użycia, zapoznaj się z przewodnikiem na temat zarządzania wszystkimi plikami na urządzeniu pamięci masowej.

ograniczony dostęp do miejsca na dane

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

Używaj ograniczonego dostępu do miejsca na dane, chyba że aplikacja potrzebuje dostępu do pliku przechowywanego poza katalogiem aplikacji i poza katalogiem, do którego dostęp mają interfejsy API MediaStore. Jeśli przechowujesz pliki aplikacji w pamięci zewnętrznej, możesz ułatwić sobie przejście na ograniczony dostęp do miejsca na dane, umieszczając te pliki w katalogu aplikacji w pamięci zewnętrznej. Dzięki temu aplikacja zachowa dostęp do tych plików, gdy włączony jest ograniczony dostęp do miejsca na dane.

Aby przygotować aplikację do ograniczonego dostępu do miejsca na dane, zapoznaj się z przewodnikiem dotyczącym przypadków użycia miejsca na dane i sprawdzonych metod. Jeśli Twoja aplikacja ma inny przypadek użycia, który nie jest objęty ograniczonym dostępem do miejsca na dane, prześlij prośbę o dodanie funkcji. Możesz tymczasowo zrezygnować z ograniczonego dostępu do miejsca na dane.

Wyświetlanie plików na urządzeniu

Aby wyświetlić pliki zapisane na urządzeniu, użyj Device File Explorer w Android Studio.

Dodatkowe materiały

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

Filmy