Guardar archivos en el almacenamiento externo en Nexus 7 y recuperar desde la PC
Para mi proyecto quiero poder guardar datos de sensores en un archivo y poder acceder a ellos desde una PC para un análisis más detallado. Este es el código que tengo hasta ahora y funciona con éxito:
File root = Environment.getExternalStorageDirectory();
File csvfile = new File(root, "Sensor_Data.csv");
FileWriter writer = new FileWriter(csvfile, true);
writer.append("Time");
writer.append(',');
writer.append("Position");
writer.append('\n');
Number data[] = new Number[4000];
for (int i = 0; i<4000; i+=2){
posHistory.toArray(data);
writer.append(String.valueOf(data[i]));
writer.append(',');
writer.append(String.valueOf(data[i+1]));
writer.append('\n');
}
writer.flush();
writer.close();
El problema es que el Nexus 7 en realidad no tiene almacenamiento externo (creo que usa algún tipo de emulador para ser compatible con la mayoría de las aplicaciones que utilizan el almacenamiento externo en su código).
Después de ejecutar este código, usando el administrador de archivos Astro en el dispositivo, veo un archivo "Sensor_Data.csv" en cuatro ubicaciones: / sdcard, / storage / sdcard0, / storage / emulated / 0, y / storage / emulated / legacy. Y cada uno de ellos puedo abrir desde el dispositivo usando texteditor o documentviewer y todos los datos están ahí.
El problema es que cuando conecto el Nexus 7 a la PC, solo veo "Almacenamiento interno", que cuando se abre realmente me muestra solo el contenido de la tarjeta SD virtual, no el almacenamiento interno real, pero el archivo .csv no está allí. Hay un directorio adicional "almacenamiento / emulado / legado" pero tampoco hay nada allí, y tampoco hay carpetas "sdcard0" o "0". Cuando registro "Environment.getExternalStorageDirectory (). GetAbsolutePath ()" para ver exactamente cuál es la ruta que obtengo / storage / emulated / 0
He intentado guardar el archivo en otro lugar en el almacenamiento interno sin éxito, pero preferiría mantenerlo en "almacenamiento externo" para que la aplicación sea compatible con la mayoría de los dispositivos que usan almacenamiento externo.
ACTUALIZAR Así que después de usar adb pull filename aquí están los resultados:
adb pull /storage/emulated/0/Sensor_Data.csv
remote object '/storage/emulated/0/Sensor_Data.csv' does not exist
adb pull /storage/emulated/legacy/Sensor_Data.csv
243 Kb/s <1495 bytes in 0.006s>
adb pull /storage/sdcard0/Sensor_Data.csv
243 Kb/s <1495 bytes in 0.006s>
adb pull /sdcard/Sensor_Data.csv
243 Kb/s <1495 bytes in 0.006s>
Entonces, la única ubicación que no funciona es /storage/emulated/0/Sensor_Data.csv aunque Astro lo ve en los cuatro y LogCat muestra que se está guardando en / storage / emulated / 0 /
También he intentado guardar en
root = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
otra vez puedo verlo en Astro en las mismas cuatro ubicaciones, pero cuando voy a través del Explorador de Windows y navego a la carpeta de descargas no está allí.