这是我的代码:
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。但是我发现它从来没有使用FileObserver.MODIFY参数调用过onEvent,有人知道如何写正确的代码吗?我的android版本是4.1.1
发布于 2013-06-25 23:17:44
也许您编写onEvent的方式不正确,请使用
if (!event.equals(MODIFY)) { return;}
//the code you want
if (path.equals(blah blah blah)) {
//some code..
}这是我在FileObserver中使用的方式,尝试一下...
发布于 2014-01-10 04:21:41
创建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不是触发器了。
发布于 2015-05-28 02:17:00
根本不是递归的!
请检查以下内容:
我建议使用RecursiveFileObserver类:
https://stackoverflow.com/questions/16858377
复制相似问题