2015-09-02 67 views
27

我有一个应用程序,它观察外部存储上的公共目录,其中FileObserver。 它在Lollipop设备上正常工作。我想增加对Marshmallow的支持,所以我使用它设置了Nexus 9平板电脑。FileObserver无法在Android 6.0中的外部存储上工作棉花糖(API 23)

在Marshmallow设备上,它失败了,在棒棒糖设备上没问题。 在棉花糖设备上,FileObserver不会对由其他进程导致的文件系统事件做出反应。例如。截图,通过adb shell创建文件。 如果文件是由我的应用程序创建的,它工作正常。我想问WRITE_EXTERNAL_STORAGEREAD_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或截屏)以外的其他进程创建的文件。
+0

您是否尝试过使用外部存储设备上的其他位置?考虑到它的敏感性,您的问题可能仅限于该目录。顺便说一句,您编译的内容与您的应用程序在运行时权限方面的行为没有关系;你的'targetSdkVersion'呢。 – CommonsWare

+0

请确保在某处保留对FileObserver的引用。如果是垃圾收集,它将停止接收事件。 –

+0

另外,FWIW,[有关于此的一个问题](https://code.google.com/p/android-developer-preview/issues/detail?id=3099)。 – CommonsWare

回答

0

这似乎是棉花糖的一个错误,see this link

这甚至在Nougat中也不是固定的,你可以摆脱API这个完整的FileObserver,因为它在大多数设备上完全没用,这是行不通的。

0

从图库中获取任何文件时请获取运行时权限。

相关问题