4

我有一个非常简单的 FileObserver 实现:

        observer = new FileObserver(rootPath+"Pictures") {
        @Override
        public void onEvent(int event, String path) {
            //event &= FileObserver.ALL_EVENTS;
            Log.d("home","event: "+event);
            if (event == FileObserver.CREATE) {
                Toast.makeText(cont, "File created", Toast.LENGTH_SHORT).show();

            }
        }
    };
    observer.startWatching();

它没有注册FileObserver.CREATE constant (256). 我的日志显示several 1's (Access), a few 16's (close_nowrite) and a few 32's (open) when I create a file but never a 256

我试过两台设备(三星 Galaxy S7 Active 和一加二)

我需要在这里做些什么不同的事情吗?

4

2 回答 2

0

#试试这个,希望对你有用。我已经测试过了。

observer = new FileObserver(rootPath+"Pictures", FileObserver.CREATE) {
        @Override
        public void onEvent(int event, String path) {
            //event &= FileObserver.ALL_EVENTS;
            Log.d("home","event: "+event);
            Toast.makeText(cont, "File created", Toast.LENGTH_SHORT).show();

            }
        }
    };
    observer.startWatching();

确保 rootPath + "Pictures" 是正确的文件路径。

于 2019-07-12T11:13:04.577 回答
0

我没有确切的答案,但我知道事件代码比文档中列出的要多和/或其中一些是某种组合,尤其是在您查看目录和子目录时。

如果您对 CREATE 事件感兴趣,您可以做的是,而不是询问

if (event == FileObserver.CREATE) { /* do something */ }

尝试询问它是否包含 CREATE 标志:

if ((event & FileObserver.CREATE) == FileObserver.CREATE) { /* do something */}

特别是,虽然这可能不是您的情况,但在创建目录时,会在 CREATE 事件中添加一个 ISDIR 标志。

希望对某人有所帮助。这是Android 的 FileObserver 所基于的系统的一个很好的描述。

于 2018-01-16T20:11:47.990 回答