【发布时间】:2020-03-06 17:36:35
【问题描述】:
android.os.FileObserver 需要java.io.File 才能运行。
但是在 Android 10 中,由于著名的“存储访问框架”,Google 限制了对除您应用的私有目录之外的所有内容的访问。因此,通过java.io.File 访问任何内容都会中断并呈现FileObserver 无用,除非您打算在应用程序的私有目录中使用它。但是,我希望在外部存储的某个目录中发生更改时收到通知。我还想避免定期检查更改。
我尝试使用ContentResolver.registerContentObserver(uri,notifyForDescendants,observer),但该方法遇到了一些问题:
- 到目前为止我插入的每个
Uri都被接受了 - 如果
Uri不起作用,它既不会失败也不会通知 - 我找不到任何文档告诉我哪个
Uris 真正有效
我在某种程度上唯一得到的工作是以下方法:
// works, but returns all changes to the external storage
contentResolver.registerContentObserver(MediaStore.Files.getContentUri("external"), true, contentObserver)
不幸的是,这包括所有外部存储,并且仅在发生更改时返回 Media Uris - 例如content://media/external/file/67226。
有没有办法查明Uri 是否指向我的目录?
或者有没有办法让registerContentObserver() 与Uri 一起工作,这样每当文件夹中的某些内容发生变化时我都会收到通知?
我也没有成功尝试与DocumentsFile 和外部存储Uris 相关的各种 Uris。
【问题讨论】:
-
也许可以尝试传递目录 uri 而不是 External Conten Uri。
-
我应该提到的,但没有用。
-
@squaresandcircles 你能解决这个问题吗?我正在从事类似的任务并坚持下去。
-
@squaresandcircles 你解决了这个问题吗?我被卡住了
-
问题仍然存在。
标签: android android-10.0 storage-access-framework fileobserver