w Android aplikacji muszę zrobić:jak odróżnić ścieżki kart SD wewnętrznej i zewnętrznej w android
If(removable SdCard is present){
String path=get the path of removable Sdcard() ;
//using this path we will create some files in sdcard
} else{
//display error message
}
W tym celu użyliśmy kodu jako:
If (Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)){
String path= Environment.getExternalStorageDirectory().getPath();
}
Powyższy kod nie powiedzie w niektórych najnowszych telefonach z Androidem. Pomóż nam w tym.
Poniżej znajdują się szczegółowe informacje dotyczące tego, co staraliśmy:
- w Android komórkowych posiadających OS ICS i Jellybean, dokładna ścieżka wymiennego sdcard waha się ze względu na producenta urządzenia.
Patrz tabela poniżej
Tested Devices OS version removable sdcard path internal sd path
Samsung galaxy s2 4.0.4 /mnt/sdcard/external_sd /mnt/sdcard
Samsung S Advance 4.1.2 /storage/extSdCard /storage/sdcard0
Samsung Galaxy s3 4.0.4 /mnt/extSdCard /mnt/sdcard
Samsung Galaxy Note 4.0.4 /mnt/sdcard/external_sd /mnt/sdcard
Po uruchomieniu powyższego kodu w tych urządzeniach dostaliśmy.
Android API Environment.getExternalStorageDirectory() getPath() zwraca tylko wewnętrzna ścieżka sd
Także środowisko API Environment.getExternalStorageState() zwraca Environment.MEDIA_M OUNTED na powyższych urządzeniach, mimo że sdcard został usunięty.
Ponadto API Environment.isExternalStorageRemovable() zawsze zwraca wartość false dla powyższych urządzeń, niezależnie od tego, czy wymienny sdcard jest obecny, czy nie.
Szukaliśmy w google i próbowałem niektóre funkcje są given.It daje tylko listę ścieżek pamięci masowej, które są zamontowane na device.But doesnot wskazać, czy sdcard removale jest obecny czy nie.
Funkcja próbowałem uzyskać ścieżkę przechowywania:
private static String getMountedPaths(){
String sdcardPath = "";
Runtime runtime = Runtime.getRuntime();
Process proc = null;
try {
proc = runtime.exec("mount");
} catch (IOException e1) {
e1.printStackTrace();
}
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
String line;
BufferedReader br = new BufferedReader(isr);
try {
while ((line = br.readLine()) != null) {
if (line.contains("secure")) continue;
if (line.contains("asec")) continue;
if (line.contains("fat")) {//TF card
String columns[] = line.split(" ");
if (columns != null && columns.length > 1) {
mount.add(columns[1]);
sdcardPath=columns[1];
}
} else if (line.contains("fuse")) {//internal storage
String columns[] = line.split(" ");
if (columns != null && columns.length > 1) {
mount.add(columns[1]);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return sdcardPath;
}
Czy istnieje jakakolwiek inna funkcja lepsze niż powyżej, aby otrzymać listę ścieżek pamięci masowej w android? również pomóc w rozwiązaniu powyższego problemu.
ja też miałem podobny problem, myślę, że to najlepszy sposób, aby uzyskać ścieżkę urządzenia wewnętrznego i zewnętrznego jest jako co uczyniłeś. A co jest nie tak z powyższym? – Raghunandan
sprawdź link tutaj. użyłem podobnego kodu jak powyżej http://stackoverflow.com/questions/16637935/a-safe-path-to-external-storage/16638064#16638064 – Raghunandan
"Dalej API Environment.isExternalStorageRemovable() zawsze zwraca wartość false dla powyższych urządzeń czy wymienny sdcard jest obecny, czy nie. "... Co masz na myśli? – xmen