通过intent打开vCard

4

我希望通过intent在安卓联系人中打开vCard。我有一个包含在字符串中的vCard:

BEGIN:VCARD
N:Zai;Alex;
TITLE:
TEL:7867843312346
ORG:Platinum tech
URL:http://google.com
EMAIL:
END:VCARD

我尝试打开它:

String uri = adapter.getItem(position).getVcard().toString();
Intent i = new Intent();
i.setAction(android.content.Intent.ACTION_VIEW);   
i.setDataAndType(Uri.parse(adapter.getItem(position).getResult().toString()),"text/x-vcard");
startActivity(i);

但是它会崩溃并显示以下日志:

08-24 12:18:27.686: E/AndroidRuntime(11811): 致命异常:主要android.content.ActivityNotFoundException:找不到处理Intent的Activity { act=android.intent.action.VIEW dat=BEGIN:VCARD

2个回答

1
当您为意图设置数据时,它必须是正确的 Uri,而不仅仅是您的 vCard 的 Uri.parse。但是不用担心,因为可以将您的 vCard 编码为 Base64(Android 方便地内置了此功能,因此导入 android.util.Base64),并将其作为 Uri 放入其中,例如:
i.setDataAndType(Uri.parse("data:text/x-vcard;base64," + Base64.encodeToString(theStringContainingYourVcard.getBytes()),"text/x-vcard");

这实际上是一个不错的解决方案,但是如果我想将其发送到另一个应用程序,如Gmail,则会显示文件未找到,并且不会附加任何内容到邮件中。 - Torsten Ojaperv

0

我认为uri应该指向一个文件uri。
Uri.parse不知道如何解析您传递的vcard字符串。创建一个带有Vcard数据的文件,然后使用Uri.fromFile(file),然后在setDataAndType中使用此uri。


至少通讯录应用程序中的代码不支持使用除文件 URI 以外的任何东西。 - nandeesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接