如何监听联系人数据库中的更改
我正在尝试侦听联系人数据库中的任何更改。
所以我创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);