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.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.