在Android上,打开使用预填充联系表添加新联系人的正确方法是什么?

时间:2013-11-29 00:14:06

标签: android android-intent android-contacts

我想打开“保存新联系人”对话框,其中包含预先填写街道地址,电话号码,电子邮件等的工作表。然后,用户可以修改,添加或保存。

我见过几种方法。

1)这种方法已弃用,但大部分都有效(无法使用像地址这样的复合类型)。

Intent i = new Intent(Intent.ACTION_INSERT_OR_EDIT);
                        i.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);
                        i.putExtra(Insert.NAME,"Name");
                        i.putExtra(Insert.PHONE,"Number");
                        startActivity(i);

2)此方法似乎是一个很好的解决方案,但我无法将此数据附加到打开联系人应用程序的意图。它仅用于以编程方式自动插入新联系人。

ArrayList<ContentProviderOperation> op=new ArrayList<ContentProviderOperation>();
                    /*  ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
                    .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, mSelectedAccount.getType()) 
                    .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, mSelectedAccount.getName()) 
            .build()); */
     op.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, name)
             .build());
     op.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.NUMBER,phone).build());

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

解决此问题的最佳做法是什么?

谢谢。

1 个答案:

答案 0 :(得分:3)

问题是你使用了错误的常量。您正在使用的Insert.NAME来自类

Contacts.Intents.Insert

在API级别5中已弃用。它已替换为类

ContactsContract.Intents.Insert

如果您使用此课程中的常量,您应该没问题!我已相应更新了您的代码:

Intent i = new Intent(Intent.ACTION_INSERT_OR_EDIT);
                        i.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);
                        i.putExtra(ContactsContract.Intents.Insert.NAME,"Name");
                        i.putExtra(ContactsContract.Intents.Insert.PHONE,"Number");
                        startActivity(i);

您可以找到ContactsContract.Intents.Insert类here的文档以及有关使用意图修改联系人的一般信息here