为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁华开满天机 2019-08-26 19:02:06
如何监听联系人数据库中的更改我正在尝试监听联系人数据库中的任何更改。所以我创建了我的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,虽然这不是在这种情况下你的代码错误的原因。


查看完整回答
反对 回复 2019-08-26
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

关于MannyNS答案的简单提示。

在这里,People.CONTENT_URI已弃用。

代码如下.-->ContactsContract.Contacts.CONTENT_URI

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


查看完整回答
反对 回复 2019-08-26

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号