android fileObserver onEvent未被调用

时间:2015-05-27 17:19:59

标签: java android fileobserver

我正在尝试确定何时修改文件。目前我有一个包含

的类文件观察者类
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是我要观察的文件的文件路径。我检查了文件路径是否有效。谁能告诉我我做错了什么?

4 个答案:

答案 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)

你需要检查的事情:

  1. 检查文件路径。
  2. 检查清单文件中的文件权限。
  3. 如果6.0以上必须动态添加权限。

答案 3 :(得分:0)

您准备好正确的答案了吗?

我遇到了同样的问题,我没有从FileObserver获得更新。可能是什么问题呢? File Observer是一个非常非常简单的抽象类。只有三种方法。而且只有一个可以实现!

我开始在不同条件下进行测试,并开始从onEvent()获得响应!我使用JStudio文件管理器复制了文件并得到响应。然后,我再次使用手机附带的文件管理器。没有回应!!!

因此,实际上,如果手机的文件管理系统进行了任何更改,您都不会收到事件。如果第三方软件确实进行了更改,则很可能会收到通知。

太烂了。

一个解决方案可能是使用JNI在C语言中创建本机文件观察器;使用linux api。