将联系人的照片写入vcf文件,android

Sar*_*ara 5 java android vcf-vcard android-contacts

我正在使用显示所有联系人列表的代码。当我从列表中选择联系人时,会显示该联系人的详细信息并保存在 .vcf 文件中(以正确的 vcard 格式),工作正常。当我选择一个也有照片的联系人时,它会在 imageView 中显示照片,但我不知道如何在 vcf 文件中写入照片。我用过这些线,

Uri photoUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,Integer.parseInt(item));
Bitmap photoBitmap;
ContentResolver cr = getContentResolver();
InputStream is = ContactsContract.Contacts.openContactPhotoInputStream(cr, photoUri);
photoBitmap = BitmapFactory.decodeStream(is);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
photoBitmap.compress(CompressFormat.JPEG, 100 , bos);
byte[] bitmapdata = bos.toByteArray();
imageEncoded = Base64.encodeToString(bitmapdata,Base64.DEFAULT);

String content = "BEGIN:VCARD\nVERSION:3.0\nCLASS:PUBLIC\nPRODID:-//class_vcard from  TroyWolf.com//NONSGML Version 1//EN\nFN:"+contactName+"\nTEL;TYPE=cell,voice:"+number+"\nPHOTO;TYPE=JPEG;ENCODING=BASE64:"+imageEncoded+"\nTZ:+0000\nEND:VCARD";
Run Code Online (Sandbox Code Playgroud)

但我在读取联系人时遇到错误(“由于意外原因无法解析 vCard,无效行:”)任何人都可以帮我解决问题吗!

Mic*_*ael 3

尝试将参数值ENCODING从更改BASE64BB是在 3.0 vCard 中使用的正确值。

此外,vCard 的正确换行符顺序是\r\n,而不是\n

您可能有兴趣使用 vCard 库来生成 vCard。 ez-vcard就是这样一个库(免责声明:我是作者)。

VCard vcard = new VCard();
vcard.setClassification("PUBLIC");
vcard.setProdId("-//class_vcard from  TroyWolf.com//NONSGML Version 1//EN");
vcard.setFormattedName(contactName);

TelephoneType tel = vcard.addTelephoneNumber(number);
tel.addType(TelephoneTypeParameter.CELL);
tel.addType(TelephoneTypeParameter.VOICE);

PhotoType photo = new PhotoType(bitmapdata, ImageTypeParameter.JPEG);
vcard.addPhoto(photo);

vcard.setTimezone(new TimezoneType(0, 0));

String content = Ezvcard.write(vcard).version(VCardVersion.V3_0).prodId(false).go();
Run Code Online (Sandbox Code Playgroud)