Подтвердить что ты не робот

FileObserver не работает на внешнем хранилище в Android 6.0 Marshmallow (API 23)

У меня есть приложение, которое наблюдает открытый каталог на внешнем хранилище с FileObserver. Он отлично работает на устройствах Lollipop. Я хочу добавить поддержку Marshmallow, поэтому я установил с ней планшет Nexus 9.

На устройстве Marshmallow он не работает, на устройстве Lollipop это нормально. На устройстве Marshmallow FileObserver не реагирует на события файловой системы, вызванные другими процессами. Например. сняв скриншот, создавая файлы через оболочку adb. Он отлично работает, если файлы созданы моим приложением.

В Marshmallow я запрашиваю разрешения WRITE_EXTERNAL_STORAGE и READ_EXTERNAL_STORAGE от Manifest.xml.

При компиляции с API 23 я также убеждаюсь, что я вызываю ActivityCompat.requestPermissions().

Когда я компилирую с API 22, я просто полагаюсь на Manifest.xml.

Он работает, если я наблюдаю материал на /data/data/my-package-name.

Это не удается, если я наблюдаю материал на /storage/emulated/0/Pictures/Screenshots.

Кто-нибудь проверил FileObserver, считая все следующее:

  • Marshmallow устройство
  • API 23 и API 22?
  • внешнее хранилище
  • файлы, созданные каким-либо другим процессом, чем приложение наблюдения (например, adb или снятие снимков экрана).
4b9b3361

Ответ 1

Это, кажется, ошибка в Marshmallow, см. эту ссылку.

Это не исправлено даже в Nougat, вы можете избавиться от API всего этого FileObserver, так как совершенно бесполезно то, что на большинстве устройств он не будет работать.