我有一个应用程序,使用
在
在
当我使用API 23进行编译时,我还确保调用
当我使用API 22进行编译时,我只依赖于
如果我观察
如果我观察
是否有人考虑过所有以下因素而测试了
:
FileObserver
观察外部存储上的公共目录。在Lollipop
设备上可以正常工作。我想添加对Marshmallow
的支持,因此我设置了一个配备了Marshmallow
的Nexus 9平板电脑。在
Marshmallow
设备上失败了,在Lollipop设备上没问题。在Marshmallow
设备上,FileObserver
不会对其他进程引起的文件系统事件做出反应。例如,通过adb
shell拍摄屏幕截图或创建文件。如果文件是由我的应用程序创建的,则可以很好地工作。在
Marshmallow
上,我从Manifest.xml
中请求WRITE_EXTERNAL_STORAGE
和READ_EXTERNAL_STORAGE
权限。当我使用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