Android 如何检测更改了哪个联系人?

Posted

技术标签:

【中文标题】Android 如何检测更改了哪个联系人?【英文标题】:Android How do you detect which Contact changed? 【发布时间】:2011-08-10 17:11:38 【问题描述】:

有没有办法确定哪个联系人发生了变化?

我知道我可以为 URI 注册一个 ContentObserver,但它只会在发生变化时触发,我应该如何知道哪个联系人发生了变化以及该联系人发生了什么变化?有什么办法可以查到吗?

我的应用程序涉及桌面客户端,我不希望每次连接时都将所有联系人发送到桌面。所以我想跟踪自上次桌面连接以来发生的变化。

提前致谢!

附言我正在使用 API 级别 5+

【问题讨论】:

你是如何解决这个问题的?谢谢。 【参考方案1】:

没有,没有办法知道哪个联系人发生了变化

c&p 来自我与此主题相关的回复here

我的应用程序基类中有这段代码。

private ContentObserver contactObserver = new ContactObserver();

private class ContactObserver extends ContentObserver 

    public ContactObserver() 
        super(null);
    

    @Override
    public void onChange(boolean selfChange) 
        super.onChange(selfChange);

        // Since onChange do not sent which user have been changed, you 
        // have to figure out how to match it with your data.
        // Note: Contact is  one of my classes.
        for (Contact contact : getContacts()) 
            if (!contact.isLinked())
                continue;

            String selection = ContactsContract.Data._ID + " = ?";
            String[] selectionArgs = new String[]  contact.getSystemId() ;
            String[] projection = new String[]  ContactsContract.Data.DISPLAY_NAME ;
            Cursor cursor = getContentResolver().query(
                    ContactsContract.Contacts.CONTENT_URI, projection,
                    selection, selectionArgs, null);

            if (!cursor.moveToFirst())
                return;

            String name = cursor.getString(0);

            if (contact.getUsername().equalsIgnoreCase(name))
                continue;

            contact.setUserName(name);

        
    

关于投影检查可以放什么here

希望对你有帮助

【讨论】:

可以分享一下Contact类吗?

以上是关于Android 如何检测更改了哪个联系人?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测是不是已在android中访问过联系人

检测android联系人是不是已被删除

Android:更改联系人时,带有广播接收器的前台服务停止工作

如何检测更新的android联系人并同步到firestore

如何检测 android 手机联系人应用程序支持结构化邮政地址?

Android 联系人照片:如何从网络上取回 (Google) 联系人图片(因此,“取消”以前的本地图片更改)