首页 > 解决方案 > 从代码中添加联系人后,phoneBook 在 android 中的句点 (.) 之后附加空格

问题描述

将联系人插入电话簿时,我不知道自己做错了什么。

这是要插入的代码。

public static void AddMultipleContact(Context context, String name , String numbers, String Data4){
    ContentResolver resolver = context.getContentResolver();
    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    int rawContactInsertIndex = ops.size();
    ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(ContactsContract.RawContacts.CONTENT_URI, true))
            .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, AccountGeneral.ACCOUNT_NAME)
            .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, AccountGeneral.ACCOUNT_TYPE)
            .withValue(ContactsContract.RawContacts.AGGREGATION_MODE, ContactsContract.RawContacts.AGGREGATION_MODE_DEFAULT)
            .withValue(ContactsContract.RawContacts.SOURCE_ID, sourceId)
            .build());
        ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(ContactsContract.Data.CONTENT_URI, true))
                .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
                .withValue(RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, numbers) // Number of the person
                .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
                .build()); // Type of mobile number

    android.util.Log.e(TAG, "AddMultipleContact:-------------- NAME  = " + name);
    ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(ContactsContract.Data.CONTENT_URI, true))
            .withValueBackReference(ContactsContract.RawContacts.Data.RAW_CONTACT_ID, rawContactInsertIndex)
            .withValue(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
            .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,  name)
            .build());
    ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(ContactsContract.Data.CONTENT_URI, true))
            .withValueBackReference(ContactsContract.RawContacts.Data.RAW_CONTACT_ID, rawContactInsertIndex)
            .withValue(ContactsContract.RawContacts.Data.MIMETYPE,MIMETYPE)
            .withValue(Data.DATA1, sourceId)
            .withValue(Data.DATA3, Data4)
            .build());

    try {
        ContentProviderResult[] results = resolver.applyBatch(ContactsContract.AUTHORITY, ops);
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

如您所见,我也在打印名称日志。

    android.util.Log.e(TAG, "AddMultipleContact:-------------- NAME  = " + name);

在这里,我将contactName 和contactNumber 发送到此方法。

我传递的名称是假设前:“A.Bcdef”但我在电话簿中看到的名称是“A.Bcdef”它在句点(。)之后添加了额外的空间。

请帮我。我在谷歌上没有得到任何解决方案,或者无法准确搜索我想要搜索的内容。

提前致谢。

标签: androidspecial-characterscontacts

解决方案


我通过改变这条线解决了这个问题

.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,  name)

.withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME,  name)

GIVEN_NAME 与我们作为值传递的名称相同

还有其他参数,例如 DISPLAY_NAME、GIVEN_NAME、FAMILY_NAME、PREFIX、MIDDLE_NAME、SUFFIX、PHONETIC_GIVEN_NAME、PHONETIC_MIDDLE_NAME、PHONETIC_FAMILY_NAME、FULL_NAME_STYLE、PHONETIC_NAME_STYLE

我真的不知道这些到底是什么意思。

但是,当我在创建联系人时添加名称为“Testing,123”时,该名称似乎类似于“123 Testing”。

所以我认为它会自动思考什么是基于 SpecialCharacters 的“middleName”和“lastName”。


推荐阅读