Search code examples
androidfileobserver

FileObserver doesn't work


In my Android app I want to detect events from directory. Here is code:

String path = Environment.getExternalStorageDirectory()
            + File.separator + "test2";
    Log.d("test", "path is " + path);

    FileObserver fileObserver = new FileObserver(path, FileObserver.ALL_EVENTS) {
        @Override
        public void onEvent(int event, String path) {
            Log.d("test", "event dectect " + event + " " + path);
        }
    };

    fileObserver.startWatching();

I copy new file to the directory. But I don't get any event. Please show me where I made a mistake.


Solution

  • You cannot use a local variable to store your FileObserver, it would be available for garbage collection after the method is run.

    Warning: If a FileObserver is garbage collected, it will stop sending events. To ensure you keep receiving events, you must keep a reference to the FileObserver instance from some other live object.

    Solution: save it to a field.