ContentObserver手动更新联系人

时间:2012-09-03 08:11:08

标签: android contactscontract

我已在服务中注册了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

2 个答案:

答案 0 :(得分:0)

我使用了[{3}}提到的 ContactsContract.Contacts.CONTENT_VCARD_URI

您还可以设置threshold_time,如提到here

它的效率更高。

答案 1 :(得分:0)

要停止接收来自ContentObserver的通知,您必须取消注册。

创建一个ContentObserver实例,稍后可以使用它来注册/取消注册。

Contact_change changeObserver = new Contact_change();

注册观察员:

getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true,changeObserver);

取消注册观察员:

getContentResolver().unregisterContentObserver(changeObserver);