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 nowszymREAD_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.