如何通过意图添加具有名字和姓氏的联系人
Posted
技术标签:
【中文标题】如何通过意图添加具有名字和姓氏的联系人【英文标题】:How to add a contact with first name and last name via intent 【发布时间】:2011-11-24 15:03:34 【问题描述】:我正在尝试使用表单中已有的一些数据启动 android 原生“添加或编辑联系人”活动。这是我目前使用的代码:
Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
intent.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);
intent.putExtra(Insert.NAME, "A name");
intent.putExtra(Insert.PHONE, "123456789");
startActivity(intent);
我的问题是我想指定名字和姓氏。我还注意到有一个 StructuredName 类,其中包含我需要的所有字段的常量标识符。不幸的是,我无法将 StructuredName 字段添加到意图中......
有人知道这是如何正确完成的吗?
注意:我不是要直接添加联系人,而是要打开一个填充的“添加联系人”对话框!
谢谢 呵呵
【问题讨论】:
【参考方案1】:ContactsContract.Intents.Insert
中的大多数/所有值都在默认联系人应用程序的 model/EntityModifier.java
类中处理 - 并且只是将 Insert.NAME
中的值填充到 StructuredName.GIVEN_NAME
中。
您可以尝试将其导入为支持所有名称组件的 vCard 2.1 (text/x-vcard),但要求您将 vCard 文件转储到 sdcard 或提供 ContentResolver#openInputStream(Uri)
可以读取的内容(通常是sdcard 上的文件或指向您自己的 ContentProvider 的 URI)。
一个使用 ContentProvider 动态创建 vCard 的简单示例:
在您的活动中:
Intent i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(Uri.parse("content://some.authority/N:Jones;Bob\nTEL:123456790\n"), "text/x-vcard");
startActivity(i);
在您的 ContentProvider 中(为 ACTION_VIEW Intent 中使用的权限注册):
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException
try
FileOutputStream fos = getContext().openFileOutput("filename.txt", Context.MODE_PRIVATE);
String vcard = "BEGIN:VCARD\nVERSION:2.1\n" +
uri.getPath().substring(1) +
"END:VCARD\n";
fos.write(vcard.getBytes("UTF-8"));
fos.close();
return ParcelFileDescriptor.open(new File(getContext().getFilesDir(), "filename.txt"), ParcelFileDescriptor.MODE_READ_ONLY);
catch (IOException e)
throw new FileNotFoundException();
这应该在触发时插入一个联系人,该联系人的名称是您在 Uri 路径中放置的任何内容到电话簿中。如果用户有多个联系人帐户,他/她将被要求选择一个。
注意: vCard 的正确编码当然会被完全忽略。我认为联系人应用程序的大多数版本应该支持 vCard 3.0,它也没有像 vCard 2.1 那样的脑死编码。
从好的方面来说,此方法还允许您添加工作/手机号码和其他号码(以及更多)。
【讨论】:
哦,快。注意到您还想编辑该死的东西 - 在大多数情况下,这只会添加联系人 - 如果您定义帐户名称和类型 - 甚至不要求用户确认(像往常一样存在巨大的安全漏洞)。 感谢詹斯的回答。这确实是一种有趣的(尽管很老套)的方法。是否有办法通过 ACTION_INSERT_OR_EDIT 将 vcard(在某个抽象层上)传递给意图? 我不知道 - ACTION_INSERT_OR_EDIT 意图在默认联系人应用程序中支持的内容非常有限。以上是关于如何通过意图添加具有名字和姓氏的联系人的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 2.1 中使用姓氏字段预填充“添加联系人”活动?