Android 如何侦听联系人数据库中的更改
我正在尝试监听联系人数据库中的任何更改 因此,我创建了contentObserver,它是Android 如何侦听联系人数据库中的更改,android,Android,我正在尝试监听联系人数据库中的任何更改 因此,我创建了contentObserver,它是contentObserver的子类: private class MyContentObserver extends ContentObserver { public MyContentObserver() { super(null); } @Override public void onChange(boole
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;
导入android.app.Activity;
导入android.database.ContentObserver;
导入android.os.Bundle;
导入android.provider.Contacts.People;
公共类TestContentObserver扩展活动{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myContentTobServer contentObserver=新建myContentTobServer();
getApplicationContext().getContentResolver().registerContentObserver(
Contacts contract.Contacts.CONTENT\u URI,
是的,
内容观察员);
}
私有类MyContentObserver扩展ContentObserver{
公共MyContentObserver(){
超级(空);
}
@凌驾
公共void onChange(布尔自更改){
super.onChange(selfChange);
Log.d(this.class.getSimpleName(),“发生了更改”);
}
}
}
一定是出了什么事
您是否通过观察员注册的光标进行更改
使用观察者函数deliverSelfNotifications()检查此情况。(默认情况下返回false)
您可能希望使用以下内容覆盖该观察者函数:
@覆盖
公共布尔传递函数deliverSelfNotifications(){
返回true;
}
编辑:MannyNS的答案现在已经用新的URI(ContactsContract.Contacts.CONTENT\u URI
更新)
关于MannyNS答案的简单提示
这里,People.CONTENT\u URI
已被弃用
代码如下所示。-->Contacts.Contacts.CONTENT\u URI
getApplicationContext().getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, contentobserver);
仅供参考-URI People.CONTENT\u URI已弃用(今天之前-2011年3月15日)。请参阅Contacts contract.Contacts.CONTENT\u URI。嗨,关于如何获取有关更改性质的信息,有什么想法吗?联系人添加、删除、更新、字段更新?奇怪的是,它在没有处理程序的情况下工作。这对我来说并不重要。此外,我真的很想知道如何在UI线程上执行代码。。。我可能遗漏了一些东西,但我对这个主题是新手。我怎么知道通讯录中的联系人已更新?是否有任何事件与联系人更改相对应,以将其包含在清单文件中,从而不将我的应用程序的服务保留在内存中?警告!!!People.CONTENT\u URI已被弃用,请改用Contacts contract.Contacts.CONTENT\u URI。
onChange()
正在多次调用内容更改。如何防止此情况发生?在此ContentObserver中;有没有办法获取添加或更改的联系人的详细信息??我想创建一个类似的侦听器,但想对添加/修改的联系人执行一些操作。据我所知,使用CotentObserver
是不可能的。关于这一点,我认为这不应该是一个单独的答案。我认为你应该编辑原文,添加反对澄清。