【问题标题】:ContentObserver for contact update manually手动更新联系人的 ContentObserver
【发布时间】: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() 然后我也认为联系人已更新,然后我会将所有联系人从电话写入数据库。所以值得案例。
  • 但它不会对您的应用程序造成任何损害。

标签: android contactscontract


【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 2013-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 1970-01-01
      相关资源
      最近更新 更多