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();
Вещи, которые вы должны проверить:
- Проверьте путь к файлу.
- Проверьте разрешение файла в файле манифеста.
- Если его выше 6.0, нужно добавить разрешение динамически.
Вы готовы к правильному ответу?
У меня была такая же проблема, когда я не получил обновлений от FileObserver. В чем может быть проблема? File Observer - очень простой абстрактный класс; всего тремя способами. И только один реализовать!
Я начал тестировать в разных условиях и начал получать ответ от onEvent()! Я скопировал файл с помощью файлового менеджера JStudio и получил ответ. Затем я снова использовал диспетчер файлов, который был у меня с телефоном. НЕТ ОТВЕТА!!
Так что на самом деле вы не получите никаких событий, если система управления файлами вашего телефона внесет какие-либо изменения. Если стороннее программное обеспечение внесет изменения, вы, вероятно, получите уведомление.
Это отстой.
Решением может быть создание собственного файлового обозревателя на C с JNI; используя linux api.