2016-08-19 2 views
1

У меня есть довольно простая реализация FileObserver:FileObserver не регистрирует СОЗДАТЬ в OnEvent

 observer = new FileObserver(rootPath+"Pictures") { 
     @Override 
     public void onEvent(int event, String path) { 
      //event &= FileObserver.ALL_EVENTS; 
      Log.d("home","event: "+event); 
      if (event == FileObserver.CREATE) { 
       Toast.makeText(cont, "File created", Toast.LENGTH_SHORT).show(); 

      } 
     } 
    }; 
    observer.startWatching(); 

это не регистрируя FileObserver.CREATE constant (256). В моем журнале отображается several 1's (Access), a few 16's (close_nowrite) and a few 32's (open) when I create a file but never a 256.

Я пробовал на двух устройствах (Samsung Galaxy S7 Активный и One Plus Two)

что-нибудь мне нужно сделать по-другому здесь?

+0

Что вы можете увидеть там, где есть тосты !? Мне пришлось поместить его в runInUIThread(). Я советую вам поставить там другое заявление и показать тост с помощью события и пути. Вы могли пропустить некоторые события, которых вы не ожидали. Я поставил наблюдателя на DCIM/Camera и получил очень много тостов после съемки. Включая «Файл создан». «путь - относительный путь: только имя файла». – greenapps

+0

хорошо, это не проблема. Я также поставил оператор Log.d() внутри my if, и он никогда не вызывается. Я регистрирую каждое событие и никогда не вижу код события для CREATE. –

+0

Не могли бы вы также попробовать DCIM/Camera? 'Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_DCIM) .getAbsolutePath() +"/Camera ")' – greenapps

ответ

0

У меня нет точного ответа, но я знаю, что кодов событий больше, чем указано в документе, и/или некоторые из них являются комбинациями, особенно когда вы смотрите каталоги и подкаталоги.

Что вы можете сделать, если вы заинтересованы в СОЗДАТЬ события, вместо того, чтобы просить

if (event == FileObserver.CREATE) { /* do something */ } 

попробуйте спросить, если он содержит СОЗДАТЬ флаг:

if ((event & FileObserver.CREATE) == FileObserver.CREATE) { /* do something */} 

В частности, хотя это, вероятно, не в вашем случае, при создании каталога в событие CREATE добавляется флаг ISDIR.

Надежды, которые помогают кому-то. Here is a nice description системы Android FileObserver основан на.

Смежные вопросы