Добавьте RawContact, чтобы он заполнил существующий контакт

Я пытаюсь добавить новый RawContact к существующему контакту, поэтому поле пользовательских данных появляется внутри исходного контакта. Я попытался добавить строку StructuredName Data в свой новый RawContact с DisplayName, который соответствует DisplayName исходного RawContact. Я думал, что сопоставление DisplayNames будет достаточно, чтобы агрегировать оба RawContacts, но приложение-приложение, похоже, отображает оба RawContacts как разные Контакты.

Вот мой код

public static void addContact(Context context, Account account, String number, String displayname) { Log.e(Global.TAG, "adding contact: " + number + " / " + displayname); ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>(); //Create our RawContact ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI); builder.withValue(RawContacts.ACCOUNT_NAME, account.name); builder.withValue(RawContacts.ACCOUNT_TYPE, account.type); operationList.add(builder.build()); //Create a Data record of common type 'StructuredName' for our RawContact builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); builder.withValueBackReference(ContactsContract.CommonDataKinds.StructuredName.RAW_CONTACT_ID, 0); builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); builder.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, displayname); operationList.add(builder.build()); //Create a Data record of custom type "vnd.android.cursor.item/vnd.be.ourservice.profile" to display a link to the profile builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0); builder.withValue(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/vnd.be.ourservice.profile"); builder.withValue(ContactsContract.Data.DATA1, number); builder.withValue(ContactsContract.Data.DATA2, "ourservice user"); builder.withValue(ContactsContract.Data.DATA3, "Go to ourservice profile"); operationList.add(builder.build()); try { mContentResolver.applyBatch(ContactsContract.AUTHORITY, operationList); Log.d(Global.TAG, "addContact batch applied"); } catch (Exception e) { Log.e(Global.TAG, "Something went wrong during creation! " + e); e.printStackTrace(); } } 

Solutions Collecting From Web of "Добавьте RawContact, чтобы он заполнил существующий контакт"

Я понял. Я попытался заменить строку CommonDataKinds.StructuredName строкой CommonDataKinds.Phone, которая содержит тот же номер, что и мой первоначальный контакт, и затем он правильно упорядочивает RawContacts.

Рабочий код выглядит следующим образом:

 public static void addContactTag(Context context, Account account, String number) { ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>(); // Create our RawContact ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI); builder.withValue(RawContacts.ACCOUNT_NAME, account.name); builder.withValue(RawContacts.ACCOUNT_TYPE, account.type); operationList.add(builder.build()); // Create a Data record of common type 'Phone' for our RawContact builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); builder.withValueBackReference(Data.RAW_CONTACT_ID, 0); builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); builder.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, number); operationList.add(builder.build()); //Create a Data record of custom type "vnd.android.cursor.item/vnd.be.ourservice.profile" to display a link to our profile builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); builder.withValueBackReference(Data.RAW_CONTACT_ID, 0); builder.withValue(ContactsContract.Data.MIMETYPE, OURSERVICE_MIMETYPE); builder.withValue(ContactsContract.Data.DATA1, number); builder.withValue(ContactsContract.Data.DATA2, "ourservice user"); builder.withValue(ContactsContract.Data.DATA3, "Go to ourservice profile"); operationList.add(builder.build()); try { mContentResolver.applyBatch(ContactsContract.AUTHORITY, operationList); Log.d(Global.TAG, "addContact batch applied"); } catch (Exception e) { Log.e(Global.TAG, "Something went wrong during creation! " + e); e.printStackTrace(); } }