手动更新联系人的 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)

大开测试:性能- 基于目标和手动场景测试有何联系和不同(连载20)

XCode 5.0.2 模拟器通讯录为空

换手机了怎么导入通讯录联系人(换了新手机如何同步联系人)

更新 android 联系人提供程序中的联系人图片

如何更新安卓联系人公司?