gpt4 book ai didi

android - 当且仅当 ContactsContract.Contacts.CONTENT_URI 发生变化时,ContentObserver 才应调用

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:55 25 4
gpt4 key购买 nike

因为我的应用程序使用来自 android.provider.ContactsContract.Data (API > 11) 和 ContactsContract.Contacts.CONTENT_URI (API < 11) 的内容来填充 联系人

我已尝试针对这些提供商registerContentObserver()。但它会调用我的 ContentObserver,即使我一调用电话就尝试从设备上调用某人。它确实触发了我的 ContentObserver,这对我没有用,因为 Contacts Provider 中没有内容更改。

根本原因:

似乎 LAST_TIME_CONTACTEDContactsContract.Contacts.CONTENT_URI 中的某些内容在从被 ContentObserver 合法唤醒的设备进行调用时进行更改>.

尝试过:

private class ContactsContentObserver extends ContentObserver {
public ContactsContentObserver() {
super(null);
}

@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Zname.getPreferences().setRefreshContact(true);
}
}

ActivityOnCreate()中注册了ContentObserver

ContactsContentObserver contactsContentObserver = new ContactsContentObserver();
getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, false, contactsContentObserver);

尝试在 registerContentObserver 上将 notifyForDescendents 设置为 false。它仍然会触发 ContentObserver

问题:

如何注册 ContentObserver 触发当且仅当联系人信息在 CRUD(创建、更新、删除)下,Last_Time_Contacted 或其后代?

最佳答案

这里的根本问题是注册 ContactsContract.Contacts.CONTENT_URI 并不像您想象的那样有效。

即使 notifyForDescendentsfalse 也会收到更新的原因是因为触发更新的 Uri 是... ContactsContract .Contacts.CONTENT_URI 并且不是正在调用的联系人行。

联系人应用程序中的违规代码可以在 GrepCode 找到并且在 Google Code 上为此提交了一个错误.

因此,要回答您的问题,您不能注册一个 ContentObserver,它会针对联系人的特定字段触发。您需要在您的应用程序中包含一些内容每当 onChange 触发时都会跟踪计算差异。

关于android - 当且仅当 ContactsContract.Contacts.CONTENT_URI 发生变化时,ContentObserver 才应调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23783356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com