FileObserver修改无效

时间:2013-05-31 13:24:34

标签: android fileobserver

这是我的代码:

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

3 个答案:

答案 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)