Android używa systemu plików podobnego do opartego na dyskach w innych systemach platform. System udostępnia kilka opcji zapisywania danych aplikacji:
- Miejsce na dane aplikacji: przechowuj pliki przeznaczone tylko do użytku aplikacji w specjalnych katalogach w pamięci wewnętrznej lub w różnych katalogach w pamięci zewnętrznej. Korzystaj z katalogów w pamięci wewnętrznej, aby zapisywać informacje poufne, do których nie powinny mieć dostępu inne aplikacje.
- Pamięć współdzielona: umożliwia przechowywanie plików, które aplikacja zamierza udostępniać innym w tym multimedia, dokumenty i inne pliki.
- Preferencje: przechowywanie prywatnych, podstawowych danych w parach klucz-wartość.
- Bazy danych: przechowywanie uporządkowanych danych w prywatnej bazie danych za pomocą klasy pokoju z biblioteki trwałości.
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 konkretnej aplikacji, | Pliki przeznaczone tylko do użytku w aplikacji | Z pamięci wewnętrznej getFilesDir() lub
getCacheDir() Z pamięci zewnętrznej getExternalFilesDir() lub
getExternalCacheDir() |
Nigdy nie jest potrzebna w przypadku pamięci wewnętrznej Nie jest potrzebna do korzystania z zewnętrznych urządzeń miejsca na dane, gdy aplikacja jest używana na urządzeniach z Androidem 4.4 (poziom API 19). lub więcej |
Nie | Tak |
Multimedia | 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 wymaga: READ_EXTERNAL_STORAGE
uprawnienia |
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ą selektora plików systemowych | Nie |
Kampanie promujące aplikacje ustawienia | Pary klucz-wartość | Biblioteka Jetpacka | Brak | Nie | Tak |
Baza danych | Uporządkowane dane | Biblioteka trwałości danych Room | 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 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ą pewnych danych (np. kiedy aplikacja podczas uruchamiania, umieść dane w katalogu pamięci wewnętrznej lub bazie danych. Pliki związane z aplikacją, które są przechowywane w pamięci zewnętrznej, nie są zawsze 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, skonfiguruj typ aplikacji pamięci masowej. W przypadku treści multimedialnych, które można udostępniać, używaj wspólnego miejsca na dane, aby inne aplikacje mogły uzyskać do nich dostęp. W przypadku uporządkowanych danych użyj ustawień (w przypadku danych klucz-wartość) lub bazy danych (w przypadku danych, które zawierają więcej niż 2 kolumny).
- Czy dane mają być prywatne dla Twojej aplikacji?
- Jeśli przechowujesz dane wrażliwe, czyli te, które nie powinny być dostępne dla innych osób aplikacji – użyj pamięci wewnętrznej, ustawień lub bazy danych. Pamięć wewnętrzna zawiera dodatkową korzyść z ukrycia danych przed użytkownikami.
Kategorie lokalizacji przechowywania
Android udostępnia 2 typy 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 to bardziej niezawodne miejsce na dane, od których zależy 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 rozmiar pakietu APK jest bardzo duży, możesz w pliku manifestu aplikacji wskazać preferencje, aby 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
,
oraz
MANAGE_EXTERNAL_STORAGE
.
We wcześniejszych wersjach Androida aplikacje musiały zadeklarować parametr
READ_EXTERNAL_STORAGE
dostępu do dowolnego pliku poza określoną w aplikacji
w pamięci zewnętrznej.
Oprócz tego aplikacje muszą zadeklarować uprawnienia WRITE_EXTERNAL_STORAGE
do zapisu
plików spoza katalogu danej aplikacji.
Najnowsze wersje Androida zależą bardziej od celu pliku niż jego lokalizacji
określa możliwość dostępu aplikacji do danego pliku i zapisywania w nim zapisu. W szczególności, jeśli Twoja 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 dostosowany do określonych celów zwiększa prywatność użytkowników
ponieważ aplikacje mają dostęp tylko do tych obszarów systemu plików urządzenia,
których używają.
Android 11 wprowadza uprawnienie MANAGE_EXTERNAL_STORAGE
, które zapewnia
uprawnienia do zapisu plików spoza katalogu aplikacji i domeny MediaStore
. Aby dowiedzieć się więcej o tych uprawnieniach i sprawdzić, dlaczego większość aplikacji nie musi ich deklarować, aby spełniać swoje przypadki użycia, zapoznaj się z przewodnikiem Zarządzanie wszystkimi plikami na urządzeniu z pamięcią masową.
Miejsce na dane ograniczone
Aby zapewnić użytkownikom większą kontrolę nad plikami i ograniczyć porządek w plikach, aplikacje, które na Androida 10 (poziom interfejsu API 29) i nowszych mają ograniczony dostęp lub ograniczone miejsce na dane. Takie aplikacje mają dostęp tylko do katalog aplikacji w pamięci zewnętrznej oraz określone typy nośników utworzony przez aplikację.
Używaj ograniczonego miejsca na dane, chyba że aplikacja potrzebuje dostępu do pliku przechowywanego poza organizacją
z katalogu przeznaczonego dla danej aplikacji i poza
katalogu, w którym MediaStore
Interfejsy API mają dostęp. Jeśli pliki związane z konkretną aplikacją przechowujesz w pamięci zewnętrznej, możesz ułatwić stosowanie ograniczonego dostępu do miejsca na dane, umieszczając te pliki w katalogu aplikacji na zewnętrznej pamięci masowej. Dzięki temu aplikacja będzie mieć dostęp do tych plików, gdy włączona jest ograniczona pamięć.
Aby przygotować aplikację do korzystania z ograniczonego miejsca na dane, zapoznaj się z sprawdzonymi metodami i przypadkami użycia miejsca na dane. Jeśli Twoja aplikacja ma inne zastosowanie, które nie jest objęte ograniczonym dostępem do pamięci, 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 przechowywane na urządzeniu, użyj Plik na urządzeniu w Android Studio Eksplorator.
Dodatkowe materiały
Więcej informacji o przechowywaniu danych znajdziesz w tych materiałach.