FileObserver 在 Android 6.0 Marshmallow (API 23) 中的外部存储上不起作用

我有一个应用程序,它使用观察外部存储上的公共目录。它在设备上工作正常。我想添加对 的支持,所以我用它设置了一台Nexus 9平板电脑。FileObserverLollipopMarshmallow

在棉花糖设备上,它失败了,在棒棒糖设备上,它没问题。在 Marshmallow 设备上,不会对由其他进程引起的文件系统事件做出反应。例如,截取屏幕截图,通过shell创建文件。如果文件是由我的应用程序创建的,则工作正常。FileObserveradb

在 上,我向 请求和权限。MarshmallowWRITE_EXTERNAL_STORAGEREAD_EXTERNAL_STORAGEManifest.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

答案 1

这似乎是棉花糖中的一个错误,请参阅此链接

即使在Nougat中也没有修复此问题,您可以摆脱整个FileObserver的API,因为它使大多数设备上完全无用的事实,它将不起作用。


答案 2

推荐