Android fileObserver onEvent не вызывается

Я пытаюсь определить, когда файл был изменен. В настоящее время у меня есть класс наблюдателя файла класса, который содержит

public class fileObserver extends FileObserver {
    public String absolutePath;
    public fileObserver(String path) {
        super(path, FileObserver.ALL_EVENTS);
        absolutePath = path;
    }

    @Override
    public void onEvent(int event, String path) {
        if (path == null) {
            return;
        }
        if (event == FileObserver.MODIFY) {
            Log.d("change","changed");
        }
    }
}

и в моей основной деятельности у меня есть

fileObserver test = new fileObserver(fullpathnamehere);
test.startWatching();

fullpathname здесь - путь к файлу, который я пытаюсь наблюдать. Я проверил, и путь к файлу действителен. Может кто-нибудь сказать мне, что я делаю не так?

3 ответа

Метод onEvent() не вызывается, потому что путь неверный:

event fileObserver test = new fileObserver(fullpathnamenere);
test.startWatching();

проверьте правильность пути вашего файла!

Попробуйте использовать:

String fullpathnamenere = Environment.getExternalStorageDirectory().getPath() + "/stuff.txt";

ОБНОВИТЬ:

Я обнаружил, что (благодаря мистеру Марку) FileObserver не рекурсивно!

проверьте это https://code.google.com/p/android/issues/detail?id=33659

Я предлагаю использовать RecursiveFileObserver https://github.com/owncloud/android/blob/master/src/com/owncloud/android/utils/RecursiveFileObserver.java

Измените свой метод onEvent() следующим образом...

 @Override
    public void onEvent(int event, String path) {
        if (path == null) {
            return;
        }
        if ((FileObserver.MODIFY & event)!=0&&path.equals("file_name")) {
            Log.d("change","changed");
        }
    }

В деятельности

fileObserver test = new fileObserver(parent_dir_path_of_the_file);
test.startWatching();

Вещи, которые вы должны проверить:

  1. Проверьте путь к файлу.
  2. Проверьте разрешение файла в файле манифеста.
  3. Если его выше 6.0, нужно добавить разрешение динамически.

Вы готовы к правильному ответу?

У меня была такая же проблема, когда я не получил обновлений от FileObserver. В чем может быть проблема? File Observer - очень простой абстрактный класс; всего тремя способами. И только один реализовать!

Я начал тестировать в разных условиях и начал получать ответ от onEvent()! Я скопировал файл с помощью файлового менеджера JStudio и получил ответ. Затем я снова использовал диспетчер файлов, который был у меня с телефоном. НЕТ ОТВЕТА!!

Так что на самом деле вы не получите никаких событий, если система управления файлами вашего телефона внесет какие-либо изменения. Если стороннее программное обеспечение внесет изменения, вы, вероятно, получите уведомление.

Это отстой.

Решением может быть создание собственного файлового обозревателя на C с JNI; используя linux api.

Другие вопросы по тегам