Android 从 Intent 获取 vCard 数据
Posted
技术标签:
【中文标题】Android 从 Intent 获取 vCard 数据【英文标题】:Android get vCard data from Intent 【发布时间】:2012-09-21 11:29:15 【问题描述】:我使用Intent.ACTION_SEND
在我的应用程序中接收数据。如何处理数据类型text/x-vcard
的发送?
当我使用intent.getStringExtra(Intent.EXTRA_TEXT)
时,它会引发异常。
【问题讨论】:
你能看看这是否有帮助***.com/questions/4599567/… 不,我读过这篇文章,那篇文章是关于如何发送而不是如何接收的。 顺便说一句,你是怎么寄给你 VCard 的?该代码将很有帮助。如果您使用的是 uri,您可以尝试 intent.getData()。 我简单地添加了接收<data android:mimeType="text/*" />
和intent-filter
的权限,并在单击导出联系人时选择我的应用程序。
【参考方案1】:
这对我有用:
Uri uri = (Uri) intent.getExtras().get(Intent.EXTRA_STREAM);
uri.toString()
给了我这个:
content://com.android.contacts/contacts/as_multi_vcard/2876r7-2A962A902A9045494F35.1957ifcf79ef7e82a0b99%3A2876r8-315551534945354F312D4F35.1957ieb4f1a6b0fcb82b9%3A2876r9-57493D3135452D3D43.1957ief585d48b64784c0%3A2876r10-4F35373D4343474959.1957if0a70009608fae23%3A2876r11-313B3531412F2D432D473135.1957i39c8fd1b6ef69e84%3A1957i51f47cecc7822f19.4035i611323cd8d55aa13%3A4035i8.4035i74aa09b30a019fa1%3A4035i2c0b359c8a47878e%3A4035i6d3c40138feef64b%3A4035i7d583f5488e47e41%3A4035ia6.4035i5%3A4035i6029e050898a86d3%3A4035i77caf53c89b4da48%3A4035i2a11745a8f3d5667%3A4035i9%3A4035i59ab32fd0fa955a9%3A4035i7391f1908a38ed1b%3A4035i6769848b08a214b0%3A4035i5a7c03c88bd1ba9e%3A4035i126427da8dfc0763%3A4035i35003ea5093abeb0%3A4035i1906758a8e16ca3a%3A4035i59a7953d883a78bf%3A4035i64249c098820452a%3A4035i48145af48ed78ebc%3A4035i2093d7568be9dff6%3A4035i469c62120db59d35.4035i388017020fbfb07e%3A4035i47e19c048aa116d7%3A239i3%3A239i2%3A239i249%3A239i248%3A239i1,
在这种形式下并不是非常有用,但堆栈上似乎有几篇关于从 URI 获取可用路径的帖子。
要从 vcard 中获取文本,以下似乎对我有用:
ContentResolver cr = getContentResolver();
InputStream stream = null;
try
stream = cr.openInputStream(uri);
catch (FileNotFoundException e)
// TODO Auto-generated catch block
e.printStackTrace();
StringBuffer fileContent = new StringBuffer("");
int ch;
try
while( (ch = stream.read()) != -1)
fileContent.append((char)ch);
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
String data = new String(fileContent);
Log.i("TAG", "data: " + data);
字符串会有回车,所以要查看 logcat 中的所有文本,请确保搜索标签(在上面的代码中它是“TAG”),这样你就可以看到所有行(见下面我的截图)。
【讨论】:
是的,我收到了同样的信息,但是我怎样才能获得像这里 en.wikipedia.org/wiki/VCard 这样的 TEXT 格式的 vCard 数据。 谢谢,工作,但你在阅读流后忘记了stream.close();
。
对于任何感兴趣的人,以下帖子帮助我找出答案:***.com/questions/5968896/…***.com/questions/5857148/android-intent-extra-stream***.com/questions/2789276/…以上是关于Android 从 Intent 获取 vCard 数据的主要内容,如果未能解决你的问题,请参考以下文章
从服务器 SMACK Android XMPP 获取 VCard Avatar iq 数据包
如何从网站将 vCard(.vcf 文件)导入 Android 联系人
使用 `xmpp` 和 `smack` 从 `vcard` 获取自定义元素
如何从 Android 中的 Intent 中获取联系信息?