我正在尝试确定何时修改文件。目前我有一个包含
的类文件观察者类public class fileObserver extends FileObserver {
public String absolutePath;
public fileObserver(String path) {
super(path, FileObserver.ALL_EVENTS);
absolutePath = path;
}
@Override
public void onEvent(int event, String path) {
if (path == null) {
return;
}
if (event == FileObserver.MODIFY) {
Log.d("change","changed");
}
}
}
在我的主要活动中我有
fileObserver test = new fileObserver(fullpathnamehere);
test.startWatching();
fullpathnamehere是我要观察的文件的文件路径。我检查了文件路径是否有效。谁能告诉我我做错了什么?
答案 0 :(得分:1)
由于路径不正确,因此未调用方法onEvent()
:
event fileObserver test = new fileObserver(fullpathnamenere);
test.startWatching();
检查文件的路径是否正确!
尝试使用:
String fullpathnamenere = Environment.getExternalStorageDirectory().getPath() + "/stuff.txt";
我发现(感谢Mark Murphy先生)FileObserver
不是递归的!
检查此 https://code.google.com/p/android/issues/detail?id=33659
我建议使用RecursiveFileObserver
的 https://github.com/owncloud/android/blob/master/src/com/owncloud/android/utils/RecursiveFileObserver.java 强>
答案 1 :(得分:0)
更改你的onEvent()方法......
@Override
public void onEvent(int event, String path) {
if (path == null) {
return;
}
if ((FileObserver.MODIFY & event)!=0&&path.equals("file_name")) {
Log.d("change","changed");
}
}
活动
fileObserver test = new fileObserver(parent_dir_path_of_the_file);
test.startWatching();
答案 2 :(得分:0)
你需要检查的事情:
答案 3 :(得分:0)
您准备好正确的答案了吗?
我遇到了同样的问题,我没有从FileObserver获得更新。可能是什么问题呢? File Observer是一个非常非常简单的抽象类。只有三种方法。而且只有一个可以实现!
我开始在不同条件下进行测试,并开始从onEvent()获得响应!我使用JStudio文件管理器复制了文件并得到响应。然后,我再次使用手机附带的文件管理器。没有回应!!!
因此,实际上,如果手机的文件管理系统进行了任何更改,您都不会收到事件。如果第三方软件确实进行了更改,则很可能会收到通知。
太烂了。
一个解决方案可能是使用JNI在C语言中创建本机文件观察器;使用linux api。