如何监听联系人数据库中的更改

我正在尝试侦听联系人数据库中的任何更改。

所以我创build了我的contentObserver,它是ContentObserver一个子类:

  private class MyContentObserver extends ContentObserver { public MyContentObserver() { super(null); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); System.out.println (" Calling onChange" ); } } MyContentObserver contentObserver = new MyContentObserver(); context.getContentResolver().registerContentObserver (People.CONTENT_URI, true, contentObserver); 

但是,当我使用“ EditContactActivity ”来更改联系人数据库时,我的onChange()不会被调用。

我已经部署你的例子,它是正常的。

 package com.test.contentobserver; import android.app.Activity; import android.database.ContentObserver; import android.os.Bundle; import android.provider.Contacts.People; public class TestContentObserver extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.getApplicationContext().getContentResolver().registerContentObserver (People.CONTENT_URI, true, contentObserver); } private class MyContentObserver extends ContentObserver { public MyContentObserver() { super(null); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); } } MyContentObserver contentObserver = new MyContentObserver(); } 

所以,你一定是做错了什么。

您是否通过观察者注册的光标进行更改?

使用Observer函数deliverSelfNotifications()检查。 (默认返回false)

你可能想用下面的东西来覆盖那个观察者函数:

 @Override public boolean deliverSelfNotifications() { return true; } 

确保People.CONTENT_URI引用正确的值(android.provider.Contacts.People)。

另外,我build议你在ContentObserver中使用Handler,但这不是在这种情况下使你的代码错误的原因。

一个简单的TIP关于MannyNS的答案。

这里, People.CONTENT_URI已被弃用。

代码如下 – > ContactsContract.Contacts.CONTENT_URI

  getApplicationContext().getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, contentobserver);