我想打开“保存新联系人”对话框,其中包含预先填写街道地址,电话号码,电子邮件等的工作表。然后,用户可以修改,添加或保存。
我见过几种方法。
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);
解决此问题的最佳做法是什么?
谢谢。答案 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