Rozumiem, że ExternalFiles ma być używany w API 8 i nowszych, a getExternalStorageDirectory jest przeznaczony dla wersji 7 i starszych. Jednak jestem trochę zdezorientowany między użyciem. Na przykład chciałem sprawdzić, czy istnieje folder, a wcześniej używałbyś czegoś takiego:
File ChildFolder = new File(Environment.getExternalStorageDirectory() + "/ParentFolder/Child");
Jednak każdy przykład, który widzę, mówi, aby użyć getExternalFilesDir (null), File.ext. Ponieważ jestem powyżej API 8, chcę użyć tej metody, ale jak po prostu sprawdzić, czy istnieje folder? Sprawdzę istnienie plików w innym momencie, ale na razie chcę tylko sprawdzić, czy foldery istnieją?
getExternalStorageDirectory()
nie niekoniecznie - może nawet nie zwykle - „ścieżkę do karty SD” powrót Zamiast tego zwraca „podstawowy katalog pamięci zewnętrznej”. Dokumenty ( developer.android.com/reference/android/os/… ) mówią:Przede wszystkim musimy zrozumieć, jaka jest różnica między pamięcią wewnętrzną, pamięcią zewnętrzną (czyli podstawową pamięcią zewnętrzną) i dodatkową pamięcią zewnętrzną?
Pamięć wewnętrzna: to pamięć niedostępna dla użytkownika, z wyjątkiem zainstalowanych aplikacji (lub przez zrootowanie urządzenia). Przykład: data / data / app_packageName
Podstawowa pamięć zewnętrzna: wbudowana pamięć współdzielona, „dostępna dla użytkownika po podłączeniu kabla USB i zamontowaniu go jako dysku na komputerze hosta”. Przykład: kiedy mówimy o Nexusie 5 32 GB.
Dodatkowa pamięć zewnętrzna: pamięć wymienna. Przykład: karta SD.
Zwraca ścieżkę do folderu plików w systemie Android / data / data / your_package / na podstawowej zewnętrznej pamięci masowej. Który jest wbudowanym magazynem.
Zwróci ścieżkę do dodatkowego katalogu zewnętrznego magazynu
źródło
File getExternalStoragePublicDirectory (String type)
iFile getFilesDir ()
również! WAŻNA AKTUALIZACJA! dla każdego, kto zetknie się z tym pytaniem.
Ponieważ jest to dość stare pytanie, chciałem tylko podać dodatkowe informacje. Od KitKat nawet aplikacje, które mają uprawnienie WRITE_EXTERNAL_STORAGE, mogą zapisywać tylko do Androida / data / data / your_package / na zewnętrznej pamięci masowej, czyli
getExternalFilesDir()
Jeśli spróbujesz napisać do
getExternalStorageDirectory() + "/somefolder/anotherfolder/"
ciebie, otrzymasz SecurityException na większości urządzeńźródło
!! WAŻNE !!
Environment.getExternalStorageDirectory()
jest przestarzałe i zamiast tego należy użyć Context # getExternalFilesDir (String), MediaStore lub Intent # ACTION_OPEN_DOCUMENT.https://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory ()
Również zaczynając od Androida.M programiści muszą prosić o uprawnienia w czasie wykonywania.
Zobacz więcej szczegółów w dokumentacji tutaj i to pytanie
Environment.getExternalStorageDirectory () została uznana za przestarzałą w języku API 29 poziomu java
źródło