我尝试编写一个应用程序,作为我的联系人和短信应用程序之间的层。这样我就可以在通过 vcard 共享联系人时为我的应用程序提供一个额外的选项。我的应用程序可以接收到意图。我通过以下方式获取内容:// uri
Uri uri = (Uri) getIntent().getExtras().get(Intent.EXTRA_STREAM);
我可以得到一个 AssetFileDescriptor :
AssetFileDescriptor afd = getContentResolver().openAssetFileDescriptor(uri, "r");
没问题。同样打开文件:
InputStream is = afd.createInputStream();
byte[] buffer = new byte[(int)afd.getDeclaredLength()];
is.read(buffer);
但是这个文件只包含“[”和一个十六进制字符串。我认为它应该考虑实际的 vcard 文件?因为我做到了
buffer.toString();
代替
new String(buffer);
它不能正确转换 utf-8 编码字节,愚蠢愚蠢的 8 小时错误....
尝试使用 query() 打开 uri
Cursor c = getContentResolver().query(uri, null, null, null, null);
给我一个包含一行的游标 ???, firstname lastname.vcf, null
在哪里 ???是三个数字。
也许其他人有用于阅读此内容。