我想知道是否有一种简单的方法可以将vcard导入为android联系人。我有一个vcard解析器,但是映射每个可能的vcard字段和字段类型将是一项痛苦的、容易出错的工作。有没有更好的方法?
android联系人看起来很像电子名片,所以我怀疑他们内部使用电子名片。然而,没有用于此的公共API。
发布于 2011-01-05 09:27:18
一个android的联系人看起来很像vcard,所以我怀疑他们内部使用vcard。
我认为这比在内部使用'vCards‘要复杂得多,特别是因为vCard实际上只是一种文本文件格式,这使得它的存储效率很低,更何况要搜索大量的文档。
ContactsContract概述(注意,我在它提到的“三层数据模型”的地方删掉了它)……
概述
ContactsContract定义了一个可扩展的联系人相关信息数据库。联系人信息存储在一个三层数据模型中:
据我所知,有一种方法可以“提取”与单个联系人相关的vCard,但我不知道有哪种方法可以从vCard创建联系人。
编辑: WRT在浏览器中单击链接时导入vCards -是的,很好。我可以确认它至少在通过蓝牙接收vCard时是有效的(当然,这是非常合理的)。如果我在手机上“打开”vCard,我会得到一个“选择器”,问我是要使用“文件编辑器”还是“联系人”( HTC的联系人应用程序--不确定它在其他手机上的叫法是否相同)。如果只有一个vCard,则在不进一步提示的情况下导入。如果有多个,我会得到另一个选择器,询问我是否要导入一个/多个/全部(多个给出另一个带有复选框的选择器来进行选择)。
从理论上讲,我认为有可能将整个.vcf文件放在某个目录中,然后编写一些代码,简单地创建一个意图“打开”其中一个文件,并在startActivity()中使用它,而不指定要使用哪个活动。我不确定这里将使用哪个意图操作,但我会从ACTION_VIEW开始-其他选择可能是ACTION_EDIT或(微妙地) ACTION_RUN。
虽然这可能会在已知的环境中工作,尤其是一次性的,但它有点混乱,行为/结果可能会因手机、Android版本和联系人应用程序的不同而有所不同。
EDIT2: WRT使用意图来处理.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);发布于 2011-01-06 11:41:07
我为在Android中导入联系人作为vCard而挣扎了很多,在花了很多时间之后,我发现没有公共的API来导入联系人。
据我所知,唯一的办法就是重用Android的源代码。我通过重用Android2.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
我希望它能有所帮助!!
https://stackoverflow.com/questions/4599567
复制相似问题