手动更新联系人的 ContentObserver
Posted
技术标签:
【中文标题】手动更新联系人的 ContentObserver【英文标题】:ContentObserver for contact update manually 【发布时间】:2012-08-27 23:18:42 【问题描述】:我已经从服务中注册了ContentObserver
,并且当电话中有更新(例如电话或联系人更新)时,我会获得onchange()
功能。但我希望只有在添加、更新或删除发生时才调用 onchange()
函数。但我不希望有来电或去电。那么谁能告诉我哪个URI
我可以在contentObserver
注册?我的代码在这里
getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true,new Contact_change());
和 Contact_change.java 类是一样的
public class Contact_change extends ContentObserver
public Contact_service()
super(null);
@Override
public void onChange(boolean selfChange)
Log.i("contact_service","onchange");
Super.onChange(selfChange);
@Override
public boolean deliverSelfNotifications()
return true;
编辑:
我还有一个问题是,在停止服务后,如果我更改了联系方式,那么还会调用 onchange()
函数。那么我该如何阻止它或取消注册contentobserver
。
【问题讨论】:
我认为这是不可能的。最后一次通话的时间是联系人的一个字段,因此更改它正在更改联系人 是否有其他方法可以获取联系人更改通知?因为我想将联系人与我的应用程序同步。 如果您收到不需要的事件的额外通知,我认为这不是问题。 我有问题,因为即使联系人未更新但呼叫传入或传出并且调用 onchange() 然后我也认为联系人已更新,然后我会将所有联系人从电话写入数据库。所以值得案例。 但它不会对您的应用程序造成任何损害。 【参考方案1】:我使用了here提到的ContactsContract.Contacts.CONTENT_VCARD_URI。
你也可以设置一个阈值时间,就像提到的here
效率更高一点。
【讨论】:
【参考方案2】:要停止接收来自 ContentObserver 的通知,您必须取消注册。
创建一个 ContentObserver 实例,您可以稍后使用它来注册/取消注册。
Contact_change changeObserver = new Contact_change();
注册观察者:
getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true,changeObserver);
注销观察者:
getContentResolver().unregisterContentObserver(changeObserver);
【讨论】:
以上是关于手动更新联系人的 ContentObserver的主要内容,如果未能解决你的问题,请参考以下文章
大开测试:性能- 基于目标和手动场景测试有何联系和不同(连载20)