У меня есть приложение, которое наблюдает общий каталог на внешнем хранилище с FileObserver
. Он отлично работает на устройствах Lollipop
. Я хочу добавить поддержку для Marshmallow
, поэтому я установил с ней планшет Nexus 9.FileObserver не работает на внешнем хранилище в Android 6.0 Marshmallow (API 23)
На устройстве 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
или снятие снимков экрана).
Вы пробовали другие места на внешнем складе? Возможно, ваша проблема ограничена этим каталогом, учитывая его несколько чувствительный характер. BTW, то, что вы компилируете, не влияет на поведение вашего приложения в отношении разрешений времени выполнения; ваш 'targetSdkVersion' делает. – CommonsWare
Обязательно сохраните ссылку на FileObserver где-нибудь. Если это сбор мусора, он прекратит принимать события. –
Кроме того, FWIW, [есть проблема, связанная с этим] (https://code.google.com/p/android-developer-preview/issues/detail?id=3099). – CommonsWare