Автоматическое объединение контактов не работает при вставке нового контакта
Я вставляю 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 контакта с одинаковыми данными в приложении для набора номера.
Есть идеи?
2 ответа
Агрегирование работает только для вставленных контактов из разных учетных записей. Если вы вставите два необработанных контакта из одной учетной записи, они не будут агрегированы.
Привет @nr1 У меня была та же проблема с похожим кодом, который добавил пользовательский тип к существующему контакту, и я понял, что если вы добавляете два раза одни и те же данные к контакту, он разделяется.
как гласит документация API:
Автоматическая агрегация не является постоянной; Любое изменение составляющего исходного контакта может создать новый агрегат или разрушить существующий.
Я не знаю почему, но это всегда так, если вы делаете это больше раз, создается больше пустых контактов с данными (в моем случае).
Я сейчас смотрю, если контакт уже существует, поэтому пользовательские данные не добавляются снова.