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

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

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

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

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

【问题讨论】:

标签: android contactscontract android-syncadapter rawcontacts


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答,但问题不是如何将电话号码添加到现有的原始联系人,而是如何将我的原始联系人与具有电话号码的现有原始联系人聚合。跨度>
  • 我可能误解了你的问题。无论如何,看看RawContactsData 的表结构会有所帮助。
【解决方案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。
猜你喜欢
  • 1970-01-01
  • 2011-07-13
  • 2021-01-06
  • 2012-05-21
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多