android - 什么情况下uri传递给Android的ContentObserver.onChange()回调?

标签 android android-contentprovider contentobserver

Android 的 ContentObserver 类的 onChange() 方法表示,“在可用时包含已更改的内容 Uri。” URI 在什么情况下可用?什么情况下不可用?

uri 参数是在 API 级别 16 (Android 4.1) 中添加的,因此我希望它在 Android 4.1 和更新版本中设置。但是,我在 Android 4.3 上看到一个未设置 uri 的情况。

方法 1:有效

MyContentObserver.onChange() 被调用并传递一个有效的 uri:

contentResolver.registerContentObserver(myUri, true, new MyContentObserver());

方法 2:不起作用——为什么不呢?

调用了 MyContentObserver.onChange() 但 uri 参数为空:

contentResolver.query();
cursor.registerContentObserver(new MyContentObserver);

这是预期的吗?其中一个比另一个更受欢迎吗?我已经使用“content://com.google.android.gm/me@example.com/labels”并使用我自己的自定义 ContentProvider 对此进行了测试。

最佳答案

这是一个老问题,但仍然没有答案。所以我会添加我的答案,以防人们仍然对此感到好奇。

当您的内容提供者使用 getContext().getContentResolver().notifyChange(URI, "your_uri"); 通知已注册的观察者时,它会向 ContentResponder 请求.该方法的返回值是您使用内容响应器的 registerContentObserver() 方法注册的 ContentObserver,这是您在第一种情况下所做的。但是,在第二种情况下,您使用 CursorregisterContentObserver() 方法在 Cursor 中注册了观察者,因此 ContentResponder 对此一无所知。

关于android - 什么情况下uri传递给Android的ContentObserver.onChange()回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18991761/

相关文章:

android - 如何在首选项中注销内容观察者

android - 阻止 Android ContentObserver 被多次注册

java - 如何创建 TimePickerDialog android

android - 如何从Android中的音频检测语音成分?

android - 将本地 Assets 加载到浏览器中(而不是加载到 WebView 中)

android - 当不存在数据库或表时,是否可以在 Android 中模拟 sqlite3 Cursor?

android - 如何获取特定电话号码的电子邮件

android - 用于 SMS 的 ContentObserver

android - Google 登录 Android 应用程序以使用 Cloud Endpoints 后端

android - "CheckDuplicateJavaLibraries"任务意外失败