2013-01-15 32 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..."));