android.os.FileObserver
需要 java.io.File
发挥作用。
但是在 Android 10 中,由于著名的“存储访问框架”,Google 限制了对除您应用的私有(private)目录之外的所有内容的访问。因此,通过 java.io.File
访问任何内容中断和渲染 FileObserver
除非您打算在应用程序的私有(private)目录中使用它,否则无用。但是,我希望在外部存储的某个目录中发生更改时收到通知。我还想避免定期检查更改。
我尝试使用 ContentResolver.registerContentObserver(uri,notifyForDescendants,observer)
并遇到了该方法的一些问题:
Uri
到目前为止我已插入已被接受 Uri
不起作用Uri
s 实际工作 在某种程度上,我唯一得到的工作是以下方法:
// works, but returns all changes to the external storage
contentResolver.registerContentObserver(MediaStore.Files.getContentUri("external"), true, contentObserver)
不幸的是,这包括所有外部存储,并且只返回媒体 Uri
s 发生变化时 - 例如 content://media/external/file/67226
.有没有办法查出是否
Uri
指向我的目录? 或者有没有办法制作
registerContentObserver()
与 Uri
合作每当文件夹中的某些内容发生更改时,我都会收到通知? 我也没有成功尝试与
DocumentsFile
相关的各种 Uris和外部存储Uri
s。
最佳答案
甚至在尝试使用基本构造函数时,我不断收到错误,如下所示 -
No direct method <init>(Ljava/util/List;I)V in class Landroid/os/FileObserver; or its super classes (declaration of 'android.os.FileObserver' appears in /system/framework/framework.jar!classes2.dex)
来自对 Detect file change using FileObserver on Android 的评论:I saw that message (or something like that) when i was trying to use constructor FileObserver(File). Use of deprecated FileObserver(String) solved my problem.... Original FileObserver has bugs.
完全披露,我使用的是 Xamarin.Android API;但是,我引用的要点和评论者都在使用 Java。无论如何,确实 - 再次尝试使用对应的
String
构造函数,我终于能够制作和使用观察者。磨砺我的齿轮以使用已弃用的 API,但显然他们至少坚持到并包括 Android 12.0.0_r3 ...仍然,更希望支持的构造函数实际工作。也许这里有一些理由来提出问题。
关于android - 如何在 Android 10 中替换 FileObserver?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58794468/