2013-01-15 61 views
4

檢索對於我的項目,我希望能夠將傳感器數據保存到一個文件,並能夠從PC訪問其進行進一步的分析。這是代碼我到目前爲止,它的工作原理成功:將文件保存在Nexus 7和PC

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

的問題是,Nexus的7實際上沒有外部存儲(我相信它使用某種形式的仿真器,以便與大多數兼容在代碼中使用外部存儲的應用程序。)

運行此代碼後,使用設備上的Astro文件管理器,我在四個位置中看到一個「Sensor_Data.csv」文件:/ sdcard,/ storage/sdcard0,/storage/emulated/0和/ storage/emulated/legacy。我可以在設備內使用texteditor或documentviewer打開每個設備,所有數據都在那裏。

問題是,當我連接Nexus 7到PC時,我只看到「內部存儲器」,打開時實際上只顯示虛擬SD卡的內容,而不是實際的內部存儲器,但.csv文件不是'那裏。還有一個額外的目錄「存儲/模擬/遺留」,但沒有任何內容,也沒有「sdcard0」或「0」文件夾。當我記錄「Environment.getExternalStorageDirectory()。getAbsolutePath()」以確切地看到什麼路徑是我得到/存儲/模擬/ 0

我試過在內部存儲的其他地方保存文件沒有成功,但我寧願將其保存在「外部存儲器」中,以便該應用程序與使用外部存儲的大多數設備兼容。

UPDATE 因此,使用亞行拉名後面這裏的結果:

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> 

所以,不工作的唯一位置是/storage/emulated/0/Sensor_Data.csv甚至雖然天文看到它在所有四個logcat的顯示,它被保存在/存儲/模擬/ 0/

也只是試圖保存到

root = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); 

再次我可以看到它在Astro在相同的四個位置,但是當我通過Windows資源管理器,然後導航到下載文件夾它不存在。

+1

我發現soultion。這是和7的Nexus 4的錯誤 http://stackoverflow.com/questions/13737261/nexus-4-not-showing-files-via-mtp – billtian

+0

真棒,很好的瞭解,這僅僅是一個nexus 7的錯誤,而不是應用程序,這意味着它應該可以在任何其他使用實際SD卡的Android設備上正常工作。我會盡快測試出除nexus 7/4之外的應用程序以確認。希望這個bug在android更新中得到解決只是個時間問題。 –

回答

0

您是否嘗試過使用帶有「亞行拉文件名」和天文看到完整路徑終端?這應該是有效的,如果你使用它,你自己也不會太難。

+0

用adb pull結果更新原始文章。我知道該文件正在創建沒有任何問題,問題是將文件放到計算機上。當然,我可以使用adb工具,但這個應用程序是爲那些沒有adb工具的用戶而設計的 –

0

我也經歷過這個(在我的Nexus 4上)。該文件存在於我的手機上(使用adb shell發現它),但筆記本電腦上的文件資源管理器無法找到該文件。就像@ billtian說的,這似乎是Nexus 4和7設備上的一個bug。我在舊愛立信Xperia上試用了我的代碼,然後通過筆記本電腦找到該文件。

0

爲什麼,最好不要將它發送到您的郵件。請看下面的例子:

Intent intent = new Intent(Intent.ACTION_SEND); 
intent.setType("text/plain"); 
intent.putExtra(Intent.EXTRA_EMAIL, new String[] {"[email protected]"}); 
intent.putExtra(Intent.EXTRA_SUBJECT, "subject here"); 
intent.putExtra(Intent.EXTRA_TEXT, "body text"); 
File root = Environment.getExternalStorageDirectory(); 
File file = new File(root, xmlFilename); 
if (!file.exists() || !file.canRead()) { 
    Toast.makeText(this, "Attachment Error", Toast.LENGTH_SHORT).show(); 
    finish(); 
    return; 
} 
Uri uri = Uri.parse("file://" + file.getAbsolutePath()); 
intent.putExtra(Intent.EXTRA_STREAM, uri); 
startActivity(Intent.createChooser(intent, "Send email..."));