FileObserver 不起作用
FileObserver doesn't work
在我的 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();
我将新文件复制到目录中。但我没有得到任何事件。请告诉我哪里出错了。
您不能使用局部变量来存储您的 FileObserver,它在方法 运行 之后可用于垃圾回收。
Warning: If a FileObserver is garbage collected, it will stop sending
events. To ensure you keep receiving events, you must keep a reference
to the FileObserver instance from some other live object.
解决方法:保存到字段中。
似乎 FileObserver 对符号链接不起作用,这是 Environment.getExternalStorage() 返回的内容。
我的诀窍是使用 File.getCanonicalPath()
解析链接
示例:
File file = new File(Environment.getExteranlStorage(), "myfile");
new FileObserver(file.getCanonicalPath()) ...
添加存储权限对我有用。
扩展 @user3219477 的回答,如果您没有在应用中动态请求存储权限,请务必进入“设置”->“应用”->“您的应用”并授予存储权限。
在我的 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();
我将新文件复制到目录中。但我没有得到任何事件。请告诉我哪里出错了。
您不能使用局部变量来存储您的 FileObserver,它在方法 运行 之后可用于垃圾回收。
Warning: If a FileObserver is garbage collected, it will stop sending events. To ensure you keep receiving events, you must keep a reference to the FileObserver instance from some other live object.
解决方法:保存到字段中。
似乎 FileObserver 对符号链接不起作用,这是 Environment.getExternalStorage() 返回的内容。
我的诀窍是使用 File.getCanonicalPath()
解析链接示例:
File file = new File(Environment.getExteranlStorage(), "myfile");
new FileObserver(file.getCanonicalPath()) ...
添加存储权限对我有用。
扩展 @user3219477 的回答,如果您没有在应用中动态请求存储权限,请务必进入“设置”->“应用”->“您的应用”并授予存储权限。