2012-02-21 21 views
18

Estoy haciendo una aplicación, que extrae archivos (guardados por la aplicación Android) de la tarjeta sd del dispositivo por adb. El problema es que los diferentes dispositivos, tienen varios directorios sdcardObtener directorio sdcard por adb

es decir:

  • sdcard
  • sdcard/external_sd

primer lugar me inventaron siguiente solución:

  1. plazo adb shell
  2. ls
  3. comprobar si dir "sdcard" existe
  4. Si sí ejecución sdcard/ls y comprobar si existe external_sd
  5. valor de retorno.

Pero el problema es que tengo dos dispositivos de Samsung y GT-I9100GT-I9000 y ambos tienen un directorio sdcard/external_sd. Cuando estoy marcando System.getenv("EXTERNAL_STORAGE") uno devuelve sdcard y otro sdcard/external_sd. Necesito extraer el archivo que se guardó previamente en System.getenv("EXTERNAL_STORAGE").

Entonces la pregunta es: ¿hay algún comando para obtener el directorio de sdcard directamente desde adb, sin acceso al código de Android?

O tal vez puedo comenzar la actividad con adb's am start, y obtener el valor de retorno ? es posible?

EDIT: encontrado la solución:

adb shell echo $EXTERNAL_STORAGE 
+0

es posible que desee escapar de $ – Blackbelt

+0

Cuando estoy usando 'adb shell echo $ EXTERNAL_STORAGE' escapo el $ automáticamente. Cuando lo hago de esta manera: 1. 'adb shell' 2.'echo $ EXTERNAL_STORAGE' Tengo que terminarlo con' exit' para escapar del $ –

+0

Duplicado de http://android.stackexchange.com/q/14105/32571 – janot

Respuesta

0

que es mejor usar en lugar de getExternalStorageDirectory()System.getenv("EXTERNAL_STORAGE") Esto le proporcionará un directorio de almacenamiento externo independientemente del dispositivo.

+1

independientemente del dispositivo? ¿Quiere decir que System.getenv ("EXTERNAL_STORAGE") no puede funcionar en algunos dispositivos? –

+0

getExternalStorageDirectory() significa el almacenamiento externo de la aplicación, no el almacenamiento externo del dispositivo. Google parece haber tenido una era de diseño en la que la memoria del dispositivo expansible se eliminó de Android. Lo están devolviendo, pero los resultados son lío. Publicar Lollipop, el montaje de almacenamiento externo (sdcards, usb, net drives, etc.) debe ser sencillo. –

+0

Quería acceder a sdcard desde el script de shell, esta respuesta me ayudó mucho. No entiendo por qué las personas lo votan ... –

15

Por lo que vale, el uso de la variable $ EXTERNAL_STORAGE puede proporcionar resultados engañosos. Aquí tengo una tableta HP Slate, que tiene la variable EXTERNAL_STORAGE configurada en/storage/sdcard0. Sin embargo cuando se utiliza comando df (libre en el disco) en el caparazón, o incluso el comando mount para mostrar el espacio libre o montajes, los siguientes elementos son evidentes:

[email protected]:/ $ df 
Filesystem    Size Used Free Blksize 
/dev     452.7M 36.0K 452.7M 4096 
/mnt/asec    452.7M 0.0 K 452.7M 4096 
/mnt/obb    452.7M 0.0 K 452.7M 4096 
/system    629.9M 468.5M 161.5M 4096 
/data     5.7 G 2.3 G 3.5 G 4096 
/cache    435.9M 16.4M 419.5M 4096 
/storage/sdcard0  5.7 G 2.3 G 3.5 G 4096 
/mnt/external_sd  29.3G 64.0K 29.3G 32768 

así, la tarjeta SD externa es, de hecho,/mnt/external_sd , en lugar del valor EXTERNAL_STORAGE devuelve (que es el almacenamiento interno)

+0

Esta debería ser la respuesta. Gracias John ! –