Cómo diferenciar entre la ruta de la tarjeta SD interna y externa en android

En la aplicación Android tengo que hacer:

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 } 

Para lograr esto usamos el código como:

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

El código anterior falla en algunos de los últimos móviles Android. Por favor, ayúdenos en esto.

Debajo están los detalles de lo que hemos probado:

  • En los teléfonos móviles Android con sistema operativo de ICS y JellyBean, la ruta exacta de la tarjeta SD extraíble varía debido al fabricante del dispositivo.

Vea la tabla abajo

 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 

Al ejecutar el código anterior en estos dispositivos tenemos:

  • La API de Android Environment.getExternalStorageDirectory (). GetPath () devuelve sólo la ruta interna sd

  • También la API Environment.getExternalStorageState () devuelve Environment.MEDIA_MOUNTED en los dispositivos anteriores, aunque sdcard se elimina.

  • Además, la API Environment.isExternalStorageRemovable () devuelve siempre false para los dispositivos anteriores si hay tarjeta de memoria extraíble o no.

Hemos buscado en google y probado algunas funciones que given.It da sólo una lista de las rutas de almacenamiento que se montan en el device.But doesnot indicar si el removale sdcard está presente o no.

La función que intenté conseguir la trayectoria del almacenaje:

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

¿Hay alguna otra función mejor que la anterior para obtener la lista de rutas de almacenamiento en android? También ayudan a resolver el problema anterior.

One Solution collect form web for “Cómo diferenciar entre la ruta de la tarjeta SD interna y externa en android”

Para obtener la tarjeta SD interna

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

Para obtener una tarjeta SD externa

 String externalStorage = System.getenv("SECONDARY_STORAGE"); File f_secs = new File(externalStorage ); 
  • Cómo obtener el contenido de un directorio específico en la tarjeta SD
  • Dispositivos Android con Environment.getExternalStorageDirectory ()! = / Mnt / sdcard /?
  • ¿Hay una manera de saber si el sdcard está montado vs no instalado en absoluto?
  • Compruebe si la tarjeta SD está disponible o no se puede programar
  • Android cómo usar Environment.getExternalStorageDirectory ()
  • No obtener las intenciones relacionadas con la tarjeta SD a mi receptor de difusión
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.