我的应用允许编辑联系人。在这种情况下,我选择了一个仅存在于一个帐户中的联系人,并将其更改为将其与三个帐户相关联。但是,我最终得到了两个联系人,而不是一个联系人,如下面的ContactsContract转储中所示。为什么提供商没有聚合它们?
agg 1821, display "A Z1", key 770i236434918d3893ea.2709i79dde86f8c1565d3.2709i506dc01a0d43d677.2709i4707c358f8fb503
raw 1821, acct type com.google, acct name a@gmail.com
data 10338, display "A Z1"
data 10343, phone 123456, Pager
data 10349, phone 545, Fax Work
agg 1861, display "A Z1", key 1780r1860-q29pq04pq5Bpq16p.2709r1861-q29pq04pq5Bpq16p
raw 1860, acct type com.fusionone.account, acct name Backup Assistant
data 10580, display "A Z1"
data 10582, phone 123456, Pager
data 10584, phone 545, Fax Work
raw 1861, acct type com.google, acct name b@gmail.com
data 10581, display "A Z1"
data 10583, phone 123456, Pager
data 10585, phone 545, Fax Work
在此转储中,三个层表示聚合联系人行,原始联系人行和联系人数据行。前导词旁边的数字(例如,agg 1821)是_ID列值。 "显示"代表DISPLAY_NAME。
更具体地说,我从agg 1821开始,它来自帐户a@gmail.com(混淆)。然后我使用与agg 1821相同的显示名称为另外两个帐户创建了两个新的原始联系人(1860和1861)。您可以看到结果:两个新的原始联系人聚合在一起但该对未与原始聚合在一起(1821)联系。
答案 0 :(得分:4)
如果您希望RawContacts
通过写信AggregationExceptions加入强制聚合,请不要假设系统汇总了类似的联系人:
对于每一对,创建一个操作:
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);
ContentProviderOperation op = builder.build();
然后执行所有操作的ArrayList
:
ContentProviderResult[] res = resolver.applyBatch(ContactsContract.AUTHORITY, operationList);
res
将包含有关所有操作成功/失败的信息