FileObserver в Android 8 не запускает событие CREATE - PullRequest
0 голосов
/ 19 марта 2020

В Android Я использую FileObserver, чтобы наблюдать за папкой и что-то делать, когда создается новый файл.

Я заметил, что событие CREATE генерируется на Android 5 и Android 7, но НЕ генерируется на Android 8. Есть идеи почему?

Это псевдокод.

public class FolderObserver extends FileObserver {

   String path;
   static final int mask = (FileObserver.CREATE);

   public FolderObserver(String path) {
       super(path,mask);
       this.path = path;
   }

   void doSomeAction(string file){}

   @Override
   public void onEvent(int i, @Nullable String s) {
       switch (i) {
           case FileObserver.CREATE:
               // this event is generated on Android 5 and 7
               // but is NOT generated on Android 8
               doSomeAction(s);
               break;
           default:
               break;
       }
   }
}

....

/*
in my client
*/
FolderObserver observer = new FolderObserver(myPath);
observer.startWatching();

1 Ответ

0 голосов
/ 19 марта 2020

Наконец я нашел обходной путь.

Копирование нового файла в наблюдаемую папку генерирует событие CREATE на Android 5 и 7, в то время как генерирует событие MOVE_TO на Android 8, странно, но нормально.

Так что я просто слушаю оба этих события

static final int mask = (FileObserver.CREATE | FileObserver.MOVED_TO);

....

public void onEvent(int i, @Nullable String s) {
    switch (i) {
        case FileObserver.CREATE:
        case FileObserver.MOVED_TO:
            doSomeAction(s);
            break;
        default:
            break;
    }
}
...