2015-09-02 64 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

從圖庫中獲取任何文件時請獲取運行時權限。

相關問題