android vcard字符串联系

时间:2011-01-04 23:37:13

标签: android vcard android-contacts

我想知道是否有一种干净的方式将vcard导入为android联系人。我有一个vcard解析器,但映射每个可能的vcard字段和字段类型将是一个痛苦的,容易出错的练习。有更好的方法吗?

一个Android联系人看起来像一个vcard,所以我怀疑他们在内部使用vcards。但是,没有公共API。

2 个答案:

答案 0 :(得分:10)

  

一个android联系人看起来很像vcard,所以我怀疑他们在内部使用vcards。

我认为它比在内部使用'vCards'要复杂得多,特别是因为vCard实际上只是一种文本文件格式,因此存储效率低,而且搜索大量文件也是如此。

ContactsContract概述(注意我在提到“三层数据模型”的时候将其剪掉了)...

  

<强>概述

     

ContactsContract定义了与联系人相关的信息的可扩展数据库。联系信息存储在三层数据模型中:

据我所知,有一种方法可以“提取”与个人联系人有关的电子名片,但我不知道有人从电子名片中创建联系人。

编辑:在浏览器中点击链接时,WRT导入vCard - 是的,好的。我至少可以确认它在通过蓝牙接收vCard时是有效的(当然,这是非常合乎逻辑的)。如果我在手机上打开vCard,我会得到一个“选择器”,询问我是否要使用“文件编辑器”或“人物”(HTC联系人应用程序 - 不确定它是否在其他手机上称为相同)。如果只有一个vCard,则无需进一步提示即可导入。如果有多个,我会得到另一个选择器,询问我是否要导入一个/多个/全部(多个给另一个选择器带有复选框以进行选择)。

理论上我认为,有可能将一大堆.vcf文件转储到某个目录中并编写一些代码,这些代码只是创建一个Intent来“打开”其中一个并将其与startActivity()一起使用而不用指定要使用的活动。我不确定在这里会使用哪个意图动作,但我会从ACTION_VIEW开始 - 其他选择可能是ACTION_EDIT或(有条不紊地)ACTION_RUN。

虽然这可能在一个已知的环境中工作,特别是作为一次性,它有点混乱,行为/结果可能会因不同的手机,Android版本和联系人应用程序而异。

EDIT2: WRT使用Intent来处理.vcf文件,我只是从我的SD卡上试过它 - 我不知道怎么做而不先保存它。以下再现了我打开通过蓝牙发送的vCard时所看到的内容......

Intent i = new Intent();
i.setAction(android.content.Intent.ACTION_VIEW);
i.setDataAndType(Uri.parse("file:///mnt/sdcard/downloads/bluetooth/MickeyMouse.vcf"), "text/x-vcard");
startActivity(i);

答案 1 :(得分:0)

我在Android中作为vCard导入联系人时遇到了很多困难,在花了很多时间之后,我没有用于导入联系人的公共API。

我所知道的唯一方法就是重用Android的源代码。我通过重用Android 2.1源代码实现了相同的目标。

可以从

引用文件

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/android/pim/vcard/exception/VCardException.java/

在右侧的资源管理器中,您将找到pim文件夹下所需的所有文件。负责启动该过程的文件是ImportVCardActivity.java

我希望它有所帮助!!