Android添加联系人不自动合并重名的

6
回复
1172
查看
[复制链接]

3

主题

9

帖子

56

安币

程序猿

Rank: 2

发表于 2016-8-10 17:00:45 | 显示全部楼层 |阅读模式
本帖最后由 街桷小丑 于 2016-8-10 17:03 编辑

1.Android添加联系人首先向raw_contacts表中插入一条空记录,获取rawContactId,然后在把rawContactId和联系人数据插入到data表
[Java] 查看源文件 复制代码
ContentValues values = new ContentValues();
Uri rawContactUri = mContext.getContentResolver().insert(
                                                RawContacts.CONTENT_URI, values);
long rawContactId = ContentUris.parseId(rawContactUri);
//插入姓名和号码
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation
                    .newInsert(
                            android.provider.ContactsContract.Data.CONTENT_URI)
                    .withValue(Data.RAW_CONTACT_ID, rawContactId)
                    .withValue(Data.MIMETYPE,
                            StructuredName.CONTENT_ITEM_TYPE)
                    .withValue(StructuredName.GIVEN_NAME, name).build());
ops.add(ContentProviderOperation
                    .newInsert(
                            android.provider.ContactsContract.Data.CONTENT_URI)
                    .withValue(Data.RAW_CONTACT_ID, rawContactId)
                    .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
                    .withValue(Phone.NUMBER, mobile)
                    .withValue(Phone.TYPE, Phone.TYPE_MOBILE)
                    .withValue(Phone.LABEL,
                            Phone.getTypeLabelResource(Phone.TYPE_MOBILE))
                    .build());
try {
       ContentProviderResult[] results = mContext.getContentResolver()
                .applyBatch(ContactsContract.AUTHORITY, ops);
} catch (RemoteException e) {
        e.printStackTrace();
} catch (OperationApplicationException e) {
        e.printStackTrace();
}


这样就可以添加一个新的联系人到通讯录了。但是作为企业通讯录,不同分组下,存在同名的情况也常见,添加联系人时,先判断分组下是否存在同名的联系人,存在则更新该联系人数据,不存在则是新添加。怎样避免新添加的不合并到其他分组同名联系人中捏?以上代码会把新添加的联系人信息合并到之前添加的重名联系里面了,为什么这样捏?直接看contacts.db发现,同名的两行contact_id一样,contactsId应该是插入空的数据到raw_contacts表时就赋值了啊,在插入姓名号码前后加打印,果然前后raw_contact_id对应的的contact_id变化了。查看ContactsProvider源码发现,新插入data表数据后更新索引,会判断是否存在对应的记录,存在则会更新新添加的raw_contacts表中的contact_id为已经存在的值。查看源码发现在插入新的记录到raw_contacts表中时,加上 values.put(RawContacts.AGGREGATION_MODE,RawContacts.AGGREGATION_MODE_DISABLED);即
[Java] 查看源文件 复制代码
ContentValues values = new ContentValues();
                        values.put(RawContacts.AGGREGATION_MODE,RawContacts.AGGREGATION_MODE_DISABLED);
                        Uri rawContactUri = mContext.getContentResolver().insert(
                                        RawContacts.CONTENT_URI, values);
                        long rawContactId = ContentUris.parseId(rawContactUri);



62

主题

9832

帖子

899

安币

代码手工艺人

学海无涯

Rank: 4

QQ达人

发表于 2016-8-10 17:02:49 | 显示全部楼层
感谢分享,楼主V5~

0

主题

9263

帖子

2054

安币

Android大神

Rank: 6Rank: 6

发表于 2016-8-10 17:22:52 | 显示全部楼层
不错不错,楼主辛苦了。。。

0

主题

9366

帖子

2881

安币

Android大神

Rank: 6Rank: 6

发表于 2016-8-10 17:30:52 | 显示全部楼层
相当不错,感谢无私分享精神!

20

主题

9303

帖子

2332

安币

Android大神

Rank: 6Rank: 6

发表于 2016-8-10 17:31:22 | 显示全部楼层
相当不错,感谢无私分享精神!

3

主题

7237

帖子

1736

安币

Android大神

Rank: 6Rank: 6

发表于 2016-8-10 17:33:03 | 显示全部楼层
apkbus好的内容真的很多~赞

0

主题

9316

帖子

2894

安币

Android大神

Rank: 6Rank: 6

发表于 2016-8-10 17:36:14 | 显示全部楼层
支持,感谢,祝巴士越来越好~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )