在android中使用两个或多个电话号码创建联系人

Posted

技术标签:

【中文标题】在android中使用两个或多个电话号码创建联系人【英文标题】:Creating contact with two or more phone numbers in android 【发布时间】:2017-01-22 10:46:32 【问题描述】:

如何以编程方式在我的联系人列表中创建具有多个号码的新联系人?我尝试下一个代码:

    public static void createNewContact(Context ctx, String phone, String name, String note) 
    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    int rawContactInsertIndex = ops.size();

    ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
            .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
            .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null).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,
                    name) // Name of the person
            .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, phone) // Number of the person
            .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
            .build()); // Type of mobile number


            ops.add(ContentProviderOperation
            .newInsert(ContactsContract.Data.CONTENT_URI)
            .withValueBackReference(
                    ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex)
            .withValue(ContactsContract.Data.MIMETYPE,
                    ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE)
            .withValue(ContactsContract.CommonDataKinds.Note.NOTE, note) // note of the person
                        .build());

    try 
        ContentProviderResult[] res =ctx.getContentResolver().
                applyBatch(ContactsContract.AUTHORITY, ops);
     catch (Exception e) 
        e.printStackTrace();
     
    

在我写的程序中:

   createNewContact(context, "+12345", "nameContact");
   createNewContact(context, "+67890", "nameContact");

之后有两个名为“nameContact”的联系人。但我需要用两个号码创建一个联系人“nameContact”:“+12345”和“+67890”。

【问题讨论】:

为什么不插入电话数组?您不能依赖联系人姓名,如果您想稍后添加电话,您将需要联系人 ID 或 uri。例如,如果您的手机上有多个帐户与某个联系人进行了互动,那么您拥有的同名联系人将与您拥有的帐户一样多。 当我插入数组 numbers[] = "+12345", "+67890" ;并且代码看起来像 withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, numbers),我得到异常 IllegalArgumentException: bad value type: [Ljava.lang.String; 【参考方案1】:

我没有时间测试,但我正在考虑这个:

   public static void createNewContact(Context ctx, ArrayList<String> phones, String name, String note) 

....

for (String phone : phones) 
    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, phone) // Number of the person
            .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
            .build()); // Type of mobile number

....

【讨论】:

以上是关于在android中使用两个或多个电话号码创建联系人的主要内容,如果未能解决你的问题,请参考以下文章

Android 多联系人选择器(可选择选择哪个电话号码)

带有多个电话号码的 Flutter url_launcher

android手机,新建联系人在通讯录无法显示。

如何使用电子邮件和/或电话号码查询 Android 2.x 联系人?

使用 CursorLoader 显示具有多个电话号码的联系人

如何在 Android Studios 中更新联系人的电话号码