我的手机运行Android 4.0.4并处于媒体传输协议(MTP)模式。我的应用程序正在尝试使用以下代码的连续调用覆盖手机SD卡上的相同文本文件,并使用更大的文件:
File mDir = new File(Environment.getExternalStorageDirectory(), "Location");
File mFile = new File(mDir, "Location.txt");
PrintWriter mPW = new PrintWriter(mFile);
mPW.println(sData); // sData is a string of a few hundred characters
mPW.flush();
mPW.close();
在USB调试模式下测试期间,我遇到了以下问题。在Windows 7中,我可以打开一个用最新数据编写的文件,但Date修改的时间和大小对应于文件的早期写入,我只能看到与该大小相对应的字符数。旧文件中有效的新数据。
我搜索了网络,但似乎没有人报告过这种问题。我尝试了许多更好的编写文件的方法,包括使用缓冲的类,甚至在重写之前删除和重新创建文件,都无济于事。
重新启动手机后,问题似乎已经消失,但我不知道这是否与任何人敲响了铃声。
答案 0 :(得分:0)
通过MTP接口发布的内容是MediaStore
对文件的了解。如果您使用MediaStore
之类的内容主动告诉其文件已更改,MediaScannerConnection
最终会更快地获取您的更改。
然而,MTP 客户选择做什么取决于他们。一般来说,他们似乎缓存结果,我不知道MTP是否有任何类型的"推送"告诉MTP客户端的语义"嘿,你之前要求的东西已经改变了#34;。有些人可能会根据"重新加载"重新加载内容。或者"刷新" MTP客户端UI中的选项。其他人可能会认为内容是不变的,直到设备被拔掉并重新插入电源为止。
一般情况下,我不会提倡您的方法(持续附加到同一个文件,用户希望能够实时看到这些更改),这仅仅是因为MTP的明显限制。