2013-07-11 15 views
9

Wyobraź sobie urządzenie z Androidem bez pamięci sd. Tylko jego własna pamięć wewnętrzna.Czy Environment.getExternalStorageDirectory() zwraca folder danych, które można użyć, gdy nie jest zamontowana karta SD?

Nie jestem pewien, co zwraca w tym przypadku Environment.getExternalStorageDirectory().

Null lub lokalizacja pamięci wewnętrznej ważna dla stałego przechowywania danych?

+2

Próbowałem tego na moim telefonie. Zwraca to położenie pamięci wewnętrznej, która jest oddzielona dla przechowywania danych. –

Odpowiedz

9

public static File getExternalStorageDirectory()

Dodane w poziomie API 1

Pobiera Android zewnętrznego katalogu pamięci. Katalog ten może nie być obecnie dostępny, jeśli został zamontowany przez użytkownika na komputerze, usunięty z urządzenia lub wystąpił inny problem. Możesz określić jego bieżący stan za pomocą getExternalStorageState().

Uwaga: nie należy mylić słowa "zewnętrzne" tutaj. Ten katalog może być lepiej pomyślany jako magazyn multimediów/współużytkowany. Jest to system plików, który może pomieścić stosunkowo dużą ilość danych i jest udostępniany we wszystkich aplikacjach (nie wymusza uprawnień). Tradycyjnie jest to karta SD, ale może być również zaimplementowana jako wbudowana pamięć w urządzeniu, które różni się od chronionej pamięci wewnętrznej i może zostać zamontowane jako system plików na komputerze.

Edit:

myślę różni się od urządzenia do urządzenia.

Mam Samsung Galaxy S3 Environment.getExternalStorageDirectory() zwraca sdCard0 który jest ścieżką pamięci wewnętrznej pamięci.

Więcej info @

http://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory()

Nie polecam poniżej. Miałem dyskusję na ten temat z commonsware i rada nie polegała na skorzystaniu z poniższego. Ale możesz użyć poniższych do celów testowych.

String externalpath = new String(); 
String internalpath = new String(); 

public void getExternalMounts() { 
Runtime runtime = Runtime.getRuntime(); 
try 
{ 
Process proc = runtime.exec("mount"); 
InputStream is = proc.getInputStream(); 
InputStreamReader isr = new InputStreamReader(is); 
String line; 

BufferedReader br = new BufferedReader(isr); 
while ((line = br.readLine()) != null) { 
    if (line.contains("secure")) continue; 
    if (line.contains("asec")) continue; 

    if (line.contains("fat")) {//external card 
     String columns[] = line.split(" "); 
     if (columns != null && columns.length > 1) { 
      externalpath = externalpath.concat("*" + columns[1] + "\n"); 
     } 
} 
     else if (line.contains("fuse")) {//internal storage 
     String columns[] = line.split(" "); 
     if (columns != null && columns.length > 1) { 
      internalpath = internalpath.concat(columns[1] + "\n"); 
     } 
    } 
} 
} 
catch(Exception e) 
{ 
    e.printStackTrace(); 
} 
System.out.println("Path of sd card external............"+externalpath); 
System.out.println("Path of internal memory............"+internalpath); 
} 
+0

ciekawe, w każdym razie. Dokładny powód, dla którego go nie polecasz? Możesz wytłumaczyć? :) –

+0

@Seraphim Będę wyszukiwać i publikować ten link tutaj, jeśli mogę go znaleźć. – Raghunandan

+0

miło, dziękuję. . –

1

Będzie to zależało od rzeczywistego urządzenia docelowego. Niektórzy (np. Asus Nexus 7 lub Samsung Galaxy S [1-3] wyślą swój folder pamięci wewnętrznej Na niektórych innych urządzeniach może zwrócić wartość pustą lub pustą

Nie mogłem go wypróbować wiele urządzeń, ale z tego, co widziałem, wynika, że ​​ta metoda jest "odpowiedzią zależną od producenta",

Oficjalnie powinna zwracać pamięć, która nie jest systemowa. (Karta SD lub wewnętrzna "pamięć lutowana" jest to dodatek do wewnętrznej pamięci rdzenia)

3

Na jądrze z cyanogenmodem w moim telefonie (Android 4.1), Environment.getExternalStorageDirectory()zawsze zwraca pamięć wewnętrzną niezależnie od tego, czy karta SD jest włożona, czy nie. Są też telefony, które w ogóle nie obsługują zewnętrznych kart SD (na przykład Google Nexus 4).

Podsumowując, wynik będzie zależny od implementacji i nie można polegać na tym połączeniu, aby ponownie skonfigurować pamięć wewnętrzną lub kartę SD. Podobnie, wyniki połączenia, gdy karta SD nie jest obecna, będą również zależne od implementacji (tj. Różnią się dla każdego urządzenia).Z punktu widzenia aplikacji traktujesz ją jako miejsce przechowywania danych aplikacji.