FileObserver иногда не работает

114
25 февраля 2021, 16:20

Метод OnEvent иногда вызывается, а иногда и не вызывается.

Должен был вызываться в тех случаях, когда пользователь снял фотографию на свою камеру, и она попадает в папку /DCIM/Camera/

Создан следующий класс MediaListenerService:

public class MediaListenerService extends Service {
    private static FileObserver observer;
    public MediaListenerService() {
    }
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    @Override
    public void onCreate() {
        super.onCreate();
        startWatching();
    }
    private void startWatching() {
        //The desired path to watch or monitor
        //E.g Camera folder
        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, FileObserver.ALL_EVENTS) { // set up a file observer to watch this directory
            @Override
            public void onEvent(int event, @Nullable String path) {
                doing(pathToWatch+path);
            }
        };
        observer.startWatching();
    }
    void doing(String path){
        Log.d("DEBUG", "Log by influence of file: " + path);
    }
}

Его применение:

@Override
protected void onStart() {
    super.onStart();
    startService(new Intent(getBaseContext(), MediaListenerService.class));
}

Метод если и срабатывает, то срабатывает примерно через 20 секунд после сохранения фото. Если фото было сделано несколько, метод сработает (не факт) только для некоторых из них, и, как видно по логам, одновременно для всех фотографий.

К тому же, логгирование показывает, что onEvent никогда не вызывается для event с кодом create. Присутствуют вызовы со следующими кодами:

1: ACCESS - (Доступ)

16: CLOSE_NOWRITE - (Закрыт без записи)

32: OPEN - (Открыт)

READ ALSO
Доступ к приватным полям в классе

Доступ к приватным полям в классе

Есть класс, и в нём переменнаяДля неё сделан геттер

85
Не запускается код в cmd [закрыт]

Не запускается код в cmd [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

92
Проброс исключения в методе интерфейса

Проброс исключения в методе интерфейса

Зачем указывать для не дефолтного и не статического (те

189
Перенос строки в TextArea с помощью shift + enter

Перенос строки в TextArea с помощью shift + enter

Пытаюсь сделать так, чтобы при нажатии на enter строка не переносилась, а при зажатом shift переносиласьСделал boolean переменную, отвечающую за зажатый...

83