我有一個應用程序,它觀察外部存儲上的公共目錄,其中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