2013-05-22 7 views
8

In Android-Anwendung unterscheiden ich tun muss:wie zwischen internen und externen SD-Karte Weg in 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 
}    

Um dies zu erreichen, haben wir den Code wie:

If (Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)){ 
       String path= Environment.getExternalStorageDirectory().getPath(); 
} 

Der obige Code schlägt fehl in einigen der neuesten Android Handys. Bitte helfen Sie uns dabei.

Im Folgenden sind die Details von dem, was wir versucht haben:

  • In Android-Handys OS von ICS und JellyBean, wobei der genauen Weg des abnehmbaren sdcard variiert aufgrund des Geräteherstellers.

Siehe Tabelle unten

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 

Wenn in diesen Geräten den obigen Code laufen wir haben.

  • Das Android API Environment.getExternalStorageDirectory() getPath() gibt nur die interner sd-pfad

  • Auch die API Environment.getExternalStorageState() gibt Environment.MEDIA_M zurück OUNTED in oben genannten Geräten, obwohl sdcard entfernt wird.

  • Weiter gibt die API Environment.isExternalStorageRemovable() für die oben genannten Geräte immer den Wert false zurück, unabhängig davon, ob eine entfernbare SD-Karte vorhanden ist oder nicht.

Wir in google gesucht und versuchen, einige Funktionen, die sie gibt nur Liste der Speicherpfade given.It, die das device.But zeigt sie doesnot angebracht sind, ob die removale sdcard vorhanden ist oder nicht.

Die Funktion habe ich versucht, den Speicherpfad zu erhalten:

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; 
} 

Gibt es eine andere Funktion besser als über die Liste der Speicherpfade in Android zu bekommen? helfen auch, das obige Problem zu lösen.

+0

ich auch hatte ähnliches Problem zu bekommen bekommt ich, dass der beste Weg, den Weg des internen und externen Geräts wird als was zu bekommen du hast gemacht. Und was ist los mit dem oben genannten ?? – Raghunandan

+0

Überprüfen Sie den Link hier. Ich benutzte einen ähnlichen Code wie oben http://stackoverflow.com/questions/16637935/a-safe-path-to-external-storage/16638064#16638064 – Raghunandan

+0

"Darüber hinaus gibt die API Environment.isExternalStorageRemovable() immer falsch für die oben genannten Geräte zurück ob entfernbare sdcard vorhanden ist oder nicht. "...... Was meinst du? – xmen

Antwort

2

Zu denken, interne SD-Karte

String internalStorage = System.getenv("EXTERNAL_STORAGE"); 
File f_exts = new File(internalStorage); 

Um externe SD-Karte

String externalStorage = System.getenv("SECONDARY_STORAGE"); 
File f_secs = new File(externalStorage); 
+0

oder Sie können diesen Link auch verweisen http://stackoverflow.com/questions/22219312/android-open-external-speicher-directorysdcard-for-storing-file diesen Link auch –

Verwandte Themen