在我的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();
我将新文件复制到目录中。但我没有得到任何事件。请告诉我我犯了什么错误。
答案 0 :(得分:11)
您无法使用本地变量来存储FileObserver,在运行该方法后,它可用于垃圾回收。
警告:如果FileObserver被垃圾收集,它将停止发送 事件。为确保您继续接收活动,您必须保留参考 从其他一些活动对象到FileObserver实例。
解决方案:将其保存到字段中。
答案 1 :(得分:0)
FileObserver似乎不适用于符号链接,这是Environment.getExternalStorage()返回的。
我的诀窍是使用File.getCanonicalPath()
解析链接示例:
File file = new File(Environment.getExteranlStorage(), "myfile");
new FileObserver(file.getCanonicalPath()) ...
答案 2 :(得分:0)
添加存储权限对我有用。