android - 如何使用现有的 DISPLAY_NAME 添加新联系人?

标签 android android-contacts contactscontract

这就是我面临的问题。我的联系人中已有一个名为“Frank”的联系人。我需要添加一个名为“Frank”的新联系人。但是,如果我使用以下方法添加,新号码将添加到现有的“Frank 联系人”中。

如何正确添加同名联系人?

ArrayList<ContentProviderOperation> ops = new ArrayList<>();
int rawContactInsertIndex = ops.size();
        ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
                .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, accountType)
                .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, accountName)
                .build());

        ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex)
                .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, HelperMethods.capitalize(name_et.getText().toString()))
                .build());

        ops.add(ContentProviderOperation.
                newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex)
                .withValue(ContactsContract.Data.MIMETYPE,
                        ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, number_et.getText().toString())
                .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
                        ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM)
                .withValue(ContactsContract.CommonDataKinds.Phone.LABEL, phone_label_spinner.getSelectedItem().toString())
                .build());

getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

最佳答案

从这里找到答案:Android not adding all contacts with duplicate fields

添加 AGGREGATION_MODE 列将起作用。

 ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
                .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, accountType)
                .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, accountName)
                .withValue(ContactsContract.RawContacts.AGGREGATION_MODE, ContactsContract.RawContacts.AGGREGATION_MODE_DISABLED)
                .build());

关于android - 如何使用现有的 DISPLAY_NAME 添加新联系人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51821033/

相关文章:

android - 连接到蜂窝网络时获取 Android 的 IP 地址

android - 从 Eclipse 迁移到 Android Studio : Attribute has already been defined

android - 从安卓联系人中删除联系人

java - 对多个数据源使用游标加载器

android - 通过联系人选择器向 Android 中的 ContactsContract.CommonDataKinds.Event 添加事件

android - 联系人与原始联系人有什么区别?

java - Android获取文本EditText到AlertDialog

java - 如何为android本地化显示textview动态值

android - 使用 Contact id 获取 RawContact id

android - 添加联系人组会导致 HTC 和 Samsung 设备出现 NullPointerException