如何监听联系人数据库中的更改我正在尝试监听联系人数据库中的任何更改。所以我创建了我的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()调用不会被调用。
2 回答

富国沪深
TA贡献1790条经验 获得超9个赞
我按原样部署了你的例子,它运行正常。
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)
您可能希望使用以下内容覆盖该观察者函数:
@Overridepublic boolean deliverSelfNotifications() { return true; }
确保People.CONTENT_URI引用了正确的值(android.provider.Contacts.People)。
另外,我建议你使用Handler和ContentObserver,虽然这不是在这种情况下你的代码错误的原因。

白猪掌柜的
TA贡献1893条经验 获得超10个赞
关于MannyNS答案的简单提示。
在这里,People.CONTENT_URI
已弃用。
代码如下.-->ContactsContract.Contacts.CONTENT_URI
getApplicationContext().getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, contentobserver);
没有找到匹配的内容?试试慕课网站内搜索吧
- 2 回答
- 0 关注
- 317 浏览
添加回答
举报
0/150
提交
取消