Intereting Posts

Как реализовать FileObserver с помощью службы Android

Как вы структурируете приложение для Android, чтобы запустить Service для использования FileObserver чтобы при изменении наблюдаемого каталога (т.е. пользователь делает снимок) FileObserver другой код. При отладке метод onEvent никогда не запускается.

Вот событие onStart, которое у меня есть в моей службе. Toast стреляет в «Моя служба началась …»

 public final String TAG = "DEBUG"; public static FileObserver observer; @Override public void onStart(Intent intent, int startid) { Log.d(TAG, "onStart"); final String pathToWatch = android.os.Environment.getExternalStorageDirectory().toString() + "/DCIM/Camera/"; Toast.makeText(this, "My Service Started and trying to watch " + pathToWatch, Toast.LENGTH_LONG).show(); observer = new FileObserver(pathToWatch) { // set up a file observer to watch this directory on sd card @Override public void onEvent(int event, String file) { //if(event == FileObserver.CREATE && !file.equals(".probe")){ // check if its a "create" and not equal to .probe because thats created every time camera is launched Log.d(TAG, "File created [" + pathToWatch + file + "]"); Toast.makeText(getBaseContext(), file + " was saved!", Toast.LENGTH_LONG); //} } }; } 

Но после этого Тоста, если я сделаю снимок, onEvent никогда не срабатывает. Это определяется путем отладки. Он никогда не попадает в точку останова, и Тост никогда не срабатывает.

Когда этот каталог просматривается, новое изображение сохраняется там.

Как вы получаете FileObserver работающий в Service ?

Solutions Collecting From Web of "Как реализовать FileObserver с помощью службы Android"

См. Этот пост. Я думаю, что вам не хватает вызова observer.startWatching() после настройки вашего наблюдателя.

  observer = new FileObserver(pathToWatch) { // set up a file observer to watch this directory on sd card @Override public void onEvent(int event, String file) { //if(event == FileObserver.CREATE && !file.equals(".probe")){ // check if its a "create" and not equal to .probe because thats created every time camera is launched Log.d(TAG, "File created [" + pathToWatch + file + "]"); Toast.makeText(getBaseContext(), file + " was saved!", Toast.LENGTH_LONG).show(); //} } }; observer.startWatching(); //START OBSERVING 

Добавить .show() после toast , т.е.

 Toast.makeText(getBaseContext(), file + " was saved!", toast.LENGTH_LONG).show(); 

Еще одна вещь FileObserver не наблюдает подкаталог. Если вы хотите понаблюдать за подкаталогами, то проверьте этот пост.

Открытый рекурсивный FileObserver с открытым исходным кодом действует как расширенный FileObserver, который является рекурсивным для всех каталогов под выбранным вами каталогом

Нажмите, чтобы скачать файл