无法使用android中的ez-vcard0.9.5在vcf中编写联系人照片

时间:2015-08-08 14:30:37

标签: android bitmap base64 vcard

我正在阅读设备的联系信息,并使用ez-vcard0.9.5在vcf文件中写入。当我恢复文件时,它不会恢复联系人照片。

我使用以下代码阅读设备联系人的照片:

public static byte[] getContactPictureByte(Context context,ContentResolver cr, Cursor cur, String id) throws IOException {

    Bitmap photo = null;
    InputStream inputStream = ContactsContract.Contacts.openContactPhotoInputStream(cr, ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, new Long(id)));

    byte[] b = null;
    if (inputStream != null) {
        photo = BitmapFactory.decodeStream(inputStream);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        photo.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        b = baos.toByteArray();
        Log.v("photo","b.lemgth: " + b.length);
        inputStream.close();
    }
    return b;
}

然后将返回的字节数组添加到vcf。

pictureByte = ContactUtils.getContactPictureByte(context,cr, cur, id);
vcard.addPhoto(new Photo(pictureByte, ImageType.JPEG));
String vcardText = Ezvcard.write(vcard).version(VCardVersion.V3_0).go();

当我使用记事本打开vcf文件时,我发现“photo”标签的值太长并且一直持续到文件结尾,而vcf格式缺少其结束标记和其他信息。 照片标签就像这样开始了

PHOTO; TYPE = PNG; ENCODING = b:/ 9j / 4AAQSk ............ [直到结束]

有人可以给我解决方案吗?

感谢。

1 个答案:

答案 0 :(得分:0)

您确定要查看正确的文件吗?您的代码示例生成一个字符串,而不是写入文件。此外,ez-vcard以小写形式写入TYPE参数的值,因此如果ez-vcard写了它,它应该如下所示:PHOTO;TYPE=png;ENCODING=b: