Enregistrement de fichiers sur le stockage externe sur la Nexus 7 et la récupération à partir d'un PC

Pour mon projet, je veux être en mesure de sauvegarder les données du capteur dans un fichier, et être en mesure d'y accéder à partir d'un PC pour analyse. C'est le code je l'ai et il fonctionne avec succès:

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();

Le problème est que la Nexus 7 n'ont pas réellement de stockage externe (je crois qu'il utilise une sorte d'émulateur pour être compatible avec la plupart des applications qui font usage de stockage externe dans leur code.)

Après l'exécution de ce code, à l'aide de Astro gestionnaire de Fichiers sur le périphérique, je vois un "Sensor_Data.csv" un fichier dans quatre endroits: /sdcard, /storage/sdcard0, /storage/emulated/0 et /storage/emulated/legacy. Et chacun d'entre eux je peux l'ouvrir de l'intérieur de l'appareil à l'aide de texteditor ou documentviewer et toutes les données sont là.

Le problème est que lorsque je connecte le Nexus 7 sur le PC, je ne vois que "stockage Interne" qui, lorsqu'il est ouvert en fait me montre que le virtuel contenu de la Carte SD, pas de réel espace de stockage interne, mais l' .fichier csv n'est pas là. Il y a un autre répertoire "storage/emulated/legacy", mais rien dans il soit, et non "sdcard0" ou "0" dossiers du. Lorsque Je Me Connecte "Environnement.getExternalStorageDirectory().getAbsolutePath()" pour voir exactement quel chemin est-je obtenir /storage/emulated/0

J'ai essayé d'enregistrer le fichier à un autre emplacement dans la mémoire de stockage interne, sans succès, mais je préfère le garder en "stockage externe", de sorte que l'application est compatible avec la plupart des appareils qui utilisent de stockage externe.

Mise à JOUR
Ainsi, après l'aide de la bad tirez nom de fichier voici les résultats:

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>

Donc, le seul endroit qui ne fonctionne pas est /storage/emulated/0/Sensor_Data.csv, même si Astro le voit dans tous les quatre et LogCat montre qu'il est enregistré dans /storage/emulated/0/

Aussi juste essayé d'économie à

root = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);

encore, je peux le voir dans Astro dans les quatre mêmes endroits, mais quand je vais dans l'Explorateur Windows et accédez au dossier de téléchargements de ses pas.

J'ai trouvé la soultion. C'est un bug de Nexus 4 et 7. stackoverflow.com/questions/13737261/...
Génial, bon à savoir que c'est juste un bug de la nexus 7, et pas l'application, le sens qu'il devrait fonctionner très bien sur un autre appareil android, qui utilise un réelle de la Carte SD. Je vais tester mon application sur autre chose que la nexus 7/4 bientôt pour confirmer. J'espère que c'est juste une question de temps avant que ce bug est corrigé dans une mise à jour android.

OriginalL'auteur David Lopez | 2013-01-15