合并原始联系人

Posted

技术标签:

【中文标题】合并原始联系人【英文标题】:Merging raw contacts 【发布时间】:2012-09-02 16:11:03 【问题描述】:

我有一个帐户和一个同步适配器,可以添加新的原始联系人以及相应的私人数据条目。 我正在创建的联系人是基于电话号码的,这意味着我正在为每个现有电话号码创建一个新条目。

如何将我的原始联系人与链接到现有电话号码的现有原始联系人合并?

我尝试在数据表中创建一个新的电话号码条目,并将其链接到我正在添加的原始联系人。它可以工作,但它正在创建一个重复的电话号码。

我还尝试设置联系人 ID、显示名称、辅助显示名称,但没有成功...我可以在原始联系人中更改的唯一数据是帐户名称和类型,以及 SYNC1...SYNC4 列

【问题讨论】:

这就是解决我的问题的方法:***.com/questions/8741788/… 【参考方案1】:

原始联系人表为每个联系人保存 1 行,数据表可以为原始表中的每一行保存任意数量的行。

要向联系人添加新电话号码,请在数据表中插入行,并将 ContactsContract.Data.RAW_CONTACT_ID 设置为该联系人的原始表行 _id

【讨论】:

感谢您的回答,但问题不是如何将电话号码添加到现有的原始联系人,而是如何将我的原始联系人与具有电话号码的现有原始联系人聚合。跨度> 我可能误解了你的问题。无论如何,看看RawContacts 和Data 的表结构会有所帮助。【参考方案2】:

您需要更新 AggregationExceptions 表中的条目。 见:http://developer.android.com/reference/android/provider/ContactsContract.AggregationExceptions.html

如果需要支持批量加入的示例代码:

ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
Builder builder = ContentProviderOperation.newUpdate(AggregationExceptions.CONTENT_URI);
builder.withValue(AggregationExceptions.TYPE, AggregationExceptions.TYPE_KEEP_TOGETHER);
builder.withValue(AggregationExceptions.RAW_CONTACT_ID1, raw1);
builder.withValue(AggregationExceptions.RAW_CONTACT_ID2, raw2);
operations.add(builder.build());
contentResolver.applyBatch(ContactsContract.AUTHORITY, tempArrayList);

【讨论】:

raw1raw2 值是什么(以及我们如何获得)? 这是您需要加入/分离的两个原始联系人的原始联系人 ID。获取 raw-contact-id 的查询会因您的应用而异,但如果您已经拥有两个联系人的 contact-id,我可以向您展示如何获取每个联系人的 raw-contact-id。

以上是关于合并原始联系人的主要内容,如果未能解决你的问题,请参考以下文章

根据电话号码添加原始联系人时联系人重复

访问原始联系人数据

当您需要向联系人添加自定义信息时,如何选择要更新的原始联系人?

如何获取具有特定 LOOKUP_KEY 的联系人的所有原始联系人?

合并联系人分析 --- 之二

Dynamics CRM-标识联系人是否已在PreContactUpdate插件中合并