FileObserver未在onEvent

时间:2016-08-19 12:26:04

标签: android file fileobserver

我有一个非常简单的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和One Plus Two)

我需要做些什么呢?

2 个答案:

答案 0 :(得分:0)

我没有确切的答案,但我知道有更多的事件代码而不是文档中列出的事件代码和/或其中一些是组合,特别是在您查看目录和子目录时。 / p>

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

,那么您可以做的是
if (event == FileObserver.CREATE) { /* do something */ }

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

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

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

希望有人帮助。系统Here is a nice description的系统Android的FileObserver基于。

答案 1 :(得分: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 +“图片”是正确的文件路径。