Android używa systemu plików podobnego do systemów plików na dysku na innych platformach. 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.
- Udostępniona pamięć: przechowuj pliki, które Twoja aplikacja zamierza 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 Room.
Charakterystykę tych opcji znajdziesz w tabeli poniżej:
Typ treści | Metoda dostępu | Wymagane uprawnienia | Czy inne aplikacje mają do nich dostęp? | Czy pliki zostały usunięte po odinstalowaniu 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() |
Nie jest wymagana w przypadku pamięci wewnętrznej Nie jest wymagana w przypadku pamięci zewnętrznej, jeśli aplikacja jest używana na urządzeniach z Androidem 4.4 (poziom interfejsu API 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ą selektora plików systemowych | Nie |
Ustawienia aplikacji | Pary klucz-wartość | Biblioteka Jetpacka | Brak | Nie | Tak |
Baza danych | Dane uporządkowane | Biblioteka trwałości danych Room | Brak | Nie | Tak |
Wybrane rozwiązanie zależy od Twoich potrzeb:
- Ile miejsca zajmują Twoje dane?
- Pamięć wewnętrzna ma ograniczoną 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. podczas uruchamiania aplikacji, umieść te dane w katalogu pamięci wewnętrznej lub w bazie danych. Pliki związane z aplikacją, które są przechowywane na zewnętrznym urządzeniu do przechowywania danych, nie są zawsze dostępne, ponieważ niektóre urządzenia umożliwiają użytkownikom usunięcie fizycznego urządzenia odpowiadającego zewnętrznej pamięci masowej.
- Jakiego rodzaju dane musisz przechowywać?
- Jeśli masz dane, które są istotne tylko dla Twojej aplikacji, użyj pamięci przeznaczonej dla aplikacji. 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?
- Podczas przechowywania danych wrażliwych (danych, które nie powinny być dostępne z żadnej innej aplikacji) używaj pamięci wewnętrznej, ustawień lub bazy danych. Pamięć wewnętrzna ma tę dodatkową zaletę, że dane są niewidoczne dla użytkowników.
Kategorie lokalizacji miejsca na dane
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.
Wolumeny wymienne, takie jak karta SD, pojawiają się w systemie plików jako część pamięci zewnętrznej. Android reprezentuje te urządzenia za pomocą ścieżki, np. /sdcard
.
Aplikacje są domyślnie przechowywane w pamięci wewnętrznej. Jeśli jednak rozmiar pliku APK jest bardzo duży, możesz w pliku manifestu wskazać preferencje, aby aplikacja była instalowana na 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
.
W starszych 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 muszą też deklarować uprawnienie WRITE_EXTERNAL_STORAGE
, aby zapisywać dowolne pliki poza katalogiem aplikacji.
W nowszych wersjach Androida dostęp aplikacji do odczytu i zapisu do danego pliku zależy bardziej od przeznaczenia pliku niż jego lokalizacji. 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 na podstawie celu zwiększa prywatność użytkownika, ponieważ aplikacje mają dostęp tylko do tych obszarów systemu plików urządzenia, których faktycznie używają.
Android 11 wprowadza uprawnienie MANAGE_EXTERNAL_STORAGE
, które zapewnia dostęp do zapisu do plików poza katalogiem aplikacji i 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 instrukcją zarządzania wszystkimi plikami na urządzeniu do przechowywania danych.
Miejsce na dane ograniczone
Aby zapewnić użytkownikom większą kontrolę nad plikami i ograniczyć ich ilość, aplikacje kierowane na Androida 10 (interfejs API na poziomie 29) lub nowszego 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 na 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 mają dostęp interfejsy API MediaStore
. 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 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.