首页 > 解决方案 > FileObserver 只捕获删除事件

问题描述

我有一个服务,它启动一个 FileObserver 来监控手机摄像头拍摄的图片,特别是文件:

String initialPictureFolder =  Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString() + "/Camera/"; 

通过这个功能:

public void startFileObserver(String filePath){
    /* It only monitors this Folder, not any Subfolder */
    myFileOsberver = new PicturesFileObserver(filePath,UploadPhotosService.this);
    myFileOsberver.startWatching();
}

也就是说,FileObserver 只捕获删除事件(代码 512),仅此而已。每当我重命名文件、移动文件或从安卓相机拍照时,什么都没有发生。我错过了什么吗?我在监控错误的文件吗?

这是整个 FileObserver 类

private static int mask = FileObserver.ALL_EVENTS; 

public PicturesFileObserver(String path,UploadPhotosService myService) {
    super(path,mask);
    this.rootDir = path;
    this.myService = myService;
    Log.e(TAG,"Observer is initialized on: "+rootDir);

}

@Override
public void onEvent(int event, @Nullable String path) {
   event &= FileObserver.ALL_EVENTS;
   Log.e(TAG,String.valueOf(event)); // ONLY PRINTS 512 
    if (path != null) {
        if (path.endsWith(".jpg") || path.endsWith(".png")) {
            if ((event == FileObserver.CREATE)) {
                Log.e(TAG, "File was created " + path);

            } else if ((FileObserver.MODIFY & event) != 0) {
                Log.e(TAG, "File was modified " + path);
            } else if ((FileObserver.DELETE & event) != 0) {
                Log.e(TAG, "File was deleted " + path);
            } else if ((FileObserver.MOVED_FROM & event) != 0) {
                Log.e(TAG, "File was brought here " + path);
            } else if ((FileObserver.MOVED_TO & event) != 0) {
                Log.e(TAG, "File was brought here " + path);
            }
        } else
            Log.e(TAG, "Path not beeing a photo: " + path);
    }
}

标签: androidservicefileobserver

解决方案


推荐阅读