4

すべての連絡先のリストが表示されるコードを使用しています。リストから連絡先を選択すると、連絡先の詳細が表示され、.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";

しかし、連絡先の読み取り中にエラーが発生します (「予期しない理由で vCard の解析に失敗しました。無効な行:」) 誰でも問題を解決するのを手伝ってくれます!

4

3 に答える 3

3

ENCODINGパラメータの値を からBASE64に変更してみてくださいBB3.0 vCard で使用する正しい値です。

また、vCard の正しい改行シーケンスは\r\nではなく\nです。

vCard ライブラリを使用して vCard を生成することに興味があるかもしれません。 ez-vcardはそのようなライブラリの 1 つです (免責事項: 私は作成者です)。

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();
于 2013-04-01T13:32:34.787 に答える