这是我的代码:
public class SyncNotifyService extends Service {
private final static String TAG = "FileService";
SDCardListener fileObserver = null;
@Override
public IBinder onBind(Intent intent) {
return null;
}
public File getCacheDir() {
if (!StorageUtil.isExternalStorageAvailable()) {
return null;
}
File dir = new File(Environment.getExternalStorageDirectory(), "Cache");
return dir;
}
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate");
fileObserver = new SDCardListener(FileCache.getCacheDir().getPath(), FileObserver.MODIFY);
fileObserver.startWatching();
}
class SDCardListener extends FileObserver {
public SDCardListener(String path, int mask) {
super(path, mask);
}
@Override
public void onEvent(int event, String path) {
final int action = event & FileObserver.ALL_EVENTS;
switch (action) {
case FileObserver.MODIFY:
Log.d(TAG, "event: MODIFY");
break;
}
}
}
}
嗨,我使用此代码通知dir。但我发现它永远不会调用onEvent使用FileObserver.MODIFY参数,有人知道如何编写正确的代码吗? 我的Android版本是4.1.1
答案 0 :(得分:0)
也许你的写作onEvent是不合适的,使用
if (!event.equals(MODIFY)) { return;}
//the code you want
if (path.equals(blah blah blah)) {
//some code..
}
这是我在FileObserver中使用的方式,尝试一下......
答案 1 :(得分:0)
创建FileObserver时,路径应该是包含您正在观察的文件的目录的绝对路径:
fileObserver = new SDCardListener(FileCache.getCacheDir().getAbsolutePath(), FileObserver.MODIFY);
另外,改变这个:
public void onEvent(int event, String path) {
switch (action) {
case FileObserver.MODIFY:
Log.d(TAG, "event: MODIFY");
break;
}
}
如果未触发onEvent,请尝试更改初始化FileObserver的方式,以便它侦听ALL_EVENTS并打印触发事件。然后你就可以找出为什么不触发MODIFY。
答案 2 :(得分:0)
FileObserver
根本不是递归的!
检查一下:
<强> https://code.google.com/p/android/issues/detail?id=33659 强>
我建议使用RecursiveFileObserver
类: