我正在阅读设备的联系信息,并使用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 ............ [直到结束]
有人可以给我解决方案吗?
感谢。
答案 0 :(得分:0)
您确定要查看正确的文件吗?您的代码示例生成一个字符串,而不是写入文件。此外,ez-vcard以小写形式写入TYPE参数的值,因此如果ez-vcard写了它,它应该如下所示:PHOTO;TYPE=png;ENCODING=b: