我有一个应用程序,它观察外部存储上的公共目录,其中FileObserver
。 它在Lollipop
设备上正常工作。我想增加对Marshmallow
的支持,所以我使用它设置了Nexus 9平板电脑。FileObserver无法在Android 6.0中的外部存储上工作棉花糖(API 23)
在Marshmallow设备上,它失败了,在棒棒糖设备上没问题。 在棉花糖设备上,FileObserver
不会对由其他进程导致的文件系统事件做出反应。例如。截图,通过adb
shell创建文件。 如果文件是由我的应用程序创建的,它工作正常。我想问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
或截屏)以外的其他进程创建的文件。
您是否尝试过使用外部存储设备上的其他位置?考虑到它的敏感性,您的问题可能仅限于该目录。顺便说一句,您编译的内容与您的应用程序在运行时权限方面的行为没有关系;你的'targetSdkVersion'呢。 – CommonsWare
请确保在某处保留对FileObserver的引用。如果是垃圾收集,它将停止接收事件。 –
另外,FWIW,[有关于此的一个问题](https://code.google.com/p/android-developer-preview/issues/detail?id=3099)。 – CommonsWare