我使用以下代码将相同联系人的2次插入Android模拟器(2.3.3):
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DEFAULT)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null).build());
// structuredname
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "Test")
.withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, "Tester")
.withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, "Test")
.build());
// PHONE
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, "0")
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, "12345678").build());
try {
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (RemoteException e) {
e.printStackTrace();
} catch (OperationApplicationException e) {
e.printStackTrace();
}
根据我的理解,Android通常应该自动聚合联系人,在我的2个插入中输入一个。但是,这不会发生,我可以在拨号器应用程序中看到2个具有相同数据的联系人。
有什么想法吗?
答案 0 :(得分:1)
聚合仅适用于来自不同帐户的插入联系人。如果您从同一帐户插入两个原始联系人,则不会对其进行汇总。
答案 1 :(得分:0)
嗨@ nr1我在向现有联系人添加自定义类型的类似代码时遇到了同样的问题,我意识到,如果你将两次相同的数据添加到联系人,它就会被分开。
正如API documentation所说:
自动聚合不是永久性的;组成原始联系人的任何更改都可能会创建新的聚合或拆分现有联合。
我不知道为什么,但它总是那样,如果你这样做了更多次,就会创建更多空的数据联系人(在我的情况下)。
我现在正在查看联系人是否已经存在,因此不再添加自定义数据。