Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何侦听联系人数据库中的更改_Android - Fatal编程技术网

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

Android 如何侦听联系人数据库中的更改,android,Android,我正在尝试监听联系人数据库中的任何更改 因此,我创建了contentObserver,它是contentObserver的子类: private class MyContentObserver extends ContentObserver { public MyContentObserver() { super(null); } @Override public void onChange(boole

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

因此,我创建了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;
导入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
是不可能的。关于这一点,我认为这不应该是一个单独的答案。我认为你应该编辑原文,添加反对澄清。