2011-08-31 24 views
6

Tengo una pregunta muy simple pero hasta ahora no he podido encontrar una respuesta a esta pregunta. "¿Hay alguna forma de encontrar la ruta absoluta de INTERNAL STORAGE DIRECTORY y EXTERNAL STORAGE DIRECTORY(SDCARD) en Android?"Android: ubicación absoluta de la tarjeta SD externa

Por favor, no recomendamos el uso de Environment.getExternalStorageDirectory ya que por lo general devuelve la ruta de almacenamiento interno oa cualquier otro medio de almacenamiento se selecciona como predeterminado por el sistema operativo Android ..

Cualquier sugerencia por favor?

+1

Environment.getExternalStorageDirectory está _defined_ para devolver el directorio "almacenamiento externo", sin embargo, eso ya no es necesariamente una tarjeta extraíble. Nunca devuelve el directorio de "almacenamiento interno" (clásicamente, la/partición de datos).Es posible que no exista un estándar para Android que determine cómo determinar la ruta de una tarjeta sd extraíble en un sistema que también tiene una partición soldada en "almacenamiento externo", ya que parece ser más una extensión de proveedor que una función de Android ascendente. –

+1

Sí, estoy de acuerdo contigo. Yo también creo que no hay forma de determinar el camino de una tarjeta SD extraíble. Esto debería haberse implementado porque a veces una aplicación puede dar una opción al usuario para elegir almacenamiento interno o almacenamiento externo. En ese caso, o bien codifica las rutas de directorios para dispositivos individuales (lo cual no es una buena idea teniendo en cuenta los diferentes dispositivos disponibles en la actualidad) o Android debería generar una API pública ... – Farhan

+0

@Farhan ¿Ya ha logrado encontrar alguna solución? Estoy buscando lo mismo. ¿Intentó/proc/mount con algún éxito razonable? – Ahmed

Respuesta

5

Eso se ha pedido antes en SO, utilice la búsqueda. En resumen, 'almacenamiento externo' es más parecido a 'almacenamiento compartido' y puede o no ser implementado por una tarjeta SD real. Algunos dispositivos tienen una tarjeta SD adicional, que no se usa como almacenamiento externo. Si eso es lo que está pidiendo, actualmente no hay una API pública para acceder a su ubicación de montaje, y varía según los dispositivos. Puede consultar /proc/mount para ver lo que está montado actualmente y continuar desde allí.

+0

Me he dado cuenta que usualmente es '/ mnt/sdcard', pero ¿es eso universal? –

+0

'/ mnt/sdcard' suele ser la ruta de acceso al almacenamiento externo, pero no creo que sea universal. Las tarjetas SD adicionales (como Xoom o Iconia) se montan en otro lugar. He visto referencias al "almacenamiento externo secundario", pero no a API en el SDK. –

+0

Sí, en dispositivos como Xoom, Galaxy Tab, Asus Tablets, Samsung Galaxy S2 y muchos más./mnt/sdcard generalmente apunta al almacenamiento interno; no almacenamiento externo de tarjeta sd. – Farhan

1

Debe utilizar

Environment.getExternalStorageDirectory().getAbsolutePath() 
+1

Revise mi pregunta nuevamente. Escribí que Environment.getExternalStorageDirectory() no necesariamente devuelve la ruta absoluta del directorio real externo (tarjeta sd). – Farhan

0

pienso/almacenamiento/sdcard0/se utiliza para sdcard interna y/almacenamiento/sdcard1 se utiliza para la tarjeta SD externa si hay dos opciones de almacenamiento actual /. si está comprobando que un archivo está presente en cualquiera de las tarjetas SD o no, debe verificar todas las rutas posibles.

String path;  
if(new File("/storage/sdcard/yourpath").exist()) 
    { 
     path="/storage/sdcard/yourpath"; 
    } 
else if(new File("/storage/sdcard0/yourpath").exists()) 
    { 
     path="/storage/sdcard0/yourpath"; 
    } 
else if(new File("/storage/sdcard1/yourpath").exists()) 
    { 
     path="/storage/sdcard1/yourpath"; 
    } 
0

camino String = ExternalStorageDirectoryPath + "/ foldername /";

2

Este enlace es de la guía de configuración de Android. Supongo que es recomendable y no es obligatorio.

https://source.android.com/devices/tech/storage/config-example.html

Por lo tanto, para obtener la SDCARD, sólo se puede hacer.

String storagePath = System.getenv("SECONDARY_STORAGE"); 

if (storagePath == null) { 
    return null; 
} else { 
    String[] storagePathArray = storagePath.split(":"); 
    return storagePathArray[0]; 
} 

EXTERNAL_STORAGE parece estar en todo lo que tengo.

SECONDARY_STORAGE se definió en mi LG GTab 8.3 y mi Samsung Tab 2 & 3, pero no en mi Galaxy S (2.3) o mi Dell Venue (4.3). En dispositivos Samsung, parece que contenía varias rutas con la tarjeta SD primero, y por lo tanto, la división.

0

El Samsung Galaxy Note 10.1 2014 edición SM-P600 (y que supongo que la mayoría de las otras notas Samsung Galaxy de la misma época), la ruta completa a la tarjeta sd externa "real", es la siguiente:

/almacenamiento/extSdCard/

que encontró la mía usando un terminal y lo hizo:

cd/almacenamiento/extSdCard/

luego una vez en la raíz de la tarjeta, he utilizado el comando "ls" para listar los archivos, para poder verificar lo que estaba almacenado en él. Así es como encontré el mío. Espero que ayude a alguien más.

Cuestiones relacionadas