3

在我的 Android 应用程序中,我想检测目录中的事件。这是代码:

String path = Environment.getExternalStorageDirectory()
            + File.separator + "test2";
    Log.d("test", "path is " + path);

    FileObserver fileObserver = new FileObserver(path, FileObserver.ALL_EVENTS) {
        @Override
        public void onEvent(int event, String path) {
            Log.d("test", "event dectect " + event + " " + path);
        }
    };

    fileObserver.startWatching();

我将新文件复制到目录。但我没有得到任何事件。请告诉我我在哪里犯了错误。

4

4 回答 4

16

您不能使用局部变量来存储您的 FileObserver,在运行该方法后,它将可用于垃圾收集。

警告:如果 FileObserver 被垃圾回收,它将停止发送事件。为确保您继续接收事件,您必须保留对其他活动对象的 FileObserver 实例的引用。

解决方案:将其保存到字段中。

于 2015-09-05T05:10:18.620 回答
1

添加存储权限对我有用。

于 2018-05-31T12:31:22.427 回答
0

Expanding on @user3219477's answer be sure to go in to Settings->Apps->YourApp and grant Storage permission if you aren't requesting it dynamically in your app.

于 2021-10-11T15:49:44.073 回答
0

似乎 FileObserver 不适用于符号链接,这是 Environment.getExternalStorage() 返回的内容。

对我来说,诀窍是使用 File.getCanonicalPath() 解析链接

例子:

File file = new File(Environment.getExteranlStorage(), "myfile");
new FileObserver(file.getCanonicalPath()) ...
于 2016-05-31T21:16:30.537 回答