-
-
Save shirou/659180 to your computer and use it in GitHub Desktop.
private class PathFileObserver extends FileObserver{ | |
static final String TAG="FILEOBSERVER"; | |
/** | |
* should be end with File.separator | |
*/ | |
String rootPath; | |
static final int mask = (FileObserver.CREATE | | |
FileObserver.DELETE | | |
FileObserver.DELETE_SELF | | |
FileObserver.MODIFY | | |
FileObserver.MOVED_FROM | | |
FileObserver.MOVED_TO | | |
FileObserver.MOVE_SELF); | |
public PathFileObserver(String root){ | |
super(root, mask); | |
if (! root.endsWith(File.separator)){ | |
root += File.separator; | |
} | |
rootPath = root; | |
} | |
public void onEvent(int event, String path) { | |
switch(event){ | |
case FileObserver.CREATE: | |
Log.d(TAG, "CREATE:" + rootPath + path); | |
break; | |
case FileObserver.DELETE: | |
Log.d(TAG, "DELETE:" + rootPath + path); | |
break; | |
case FileObserver.DELETE_SELF: | |
Log.d(TAG, "DELETE_SELF:" + rootPath + path); | |
break; | |
case FileObserver.MODIFY: | |
Log.d(TAG, "MODIFY:" + rootPath + path); | |
break; | |
case FileObserver.MOVED_FROM: | |
Log.d(TAG, "MOVED_FROM:" + rootPath + path); | |
break; | |
case FileObserver.MOVED_TO: | |
Log.d(TAG, "MOVED_TO:" + path); | |
break; | |
case FileObserver.MOVE_SELF: | |
Log.d(TAG, "MOVE_SELF:" + path); | |
break; | |
default: | |
// just ignore | |
break; | |
} | |
} | |
public void close(){ | |
super.finalize(); | |
} | |
} |
This has issue on Marshmallow and forward https://issuetracker.google.com/issues/37065227
But the developer team said it has fixed and will be available in a future build, although it's not clear when
The event in onEvent() doesn't returns exact the number as doc, you need to wrap as below
public void onEvent(int event, String path) {
if ((FileObserver.CREATE & event)!=0) {
PUtils.log("CREATE: " + rootPath + path);
} else if ((FileObserver.MODIFY & event)!=0) {
PUtils.log("MODIFY: " + rootPath + path);
} else if ((FileObserver.DELETE & event)!=0) {
PUtils.log("DELETE: " + rootPath + path);
} else if ((FileObserver.DELETE_SELF & event)!=0) {
PUtils.log("DELETE_SELF: " + rootPath + path);
} else if ((FileObserver.MOVED_FROM & event)!=0) {
PUtils.log("MOVED_FROM: " + rootPath + path);
} else if ((FileObserver.MOVED_TO & event)!=0) {
PUtils.log("MOVED_TO: " + rootPath + path);
} else if ((FileObserver.MOVE_SELF & event)!=0) {
PUtils.log("MOVE_SELF: " + rootPath + path);
} else {
PUtils.log("Unhandled event " + event + rootPath + path);
}
Getting this error in logcat
java.lang.NoSuchMethodError: No direct method (Ljava/io/File;I)V in class Landroid/os/FileObserver; or its super classes (declaration of 'android.os.FileObserver' appears in /system/framework/framework.jar)
Can anyone help
Getting this error in logcat
java.lang.NoSuchMethodError: No direct method (Ljava/io/File;I)V in class Landroid/os/FileObserver; or its super classes (declaration of 'android.os.FileObserver' appears in /system/framework/framework.jar)
Can anyone help
I run into the same. Did you solved it ?
Getting this error in logcat
java.lang.NoSuchMethodError: No direct method (Ljava/io/File;I)V in class Landroid/os/FileObserver; or its super classes (declaration of 'android.os.FileObserver' appears in /system/framework/framework.jar)
Can anyone helpI run into the same. Did you solved it ?
I saw that message (or something like that) when i was trying to use constructor FileObserver(File). Use of deprecated FileObserver(String) solved my problem. Don't know why...
And for a while look at FixedFileObserver. It's in russian, but code is "in" java. Original FileObserver has bugs.
Instead of using Log.d to log an event,I would like to write all events to a file. Please help.