10

名前、画像、電話番号、ファックス番号、電子メール ID、住所などの連絡先情報を含むオブジェクトの .vcf ファイルを生成したいと考えています。このオブジェクトは電話のアドレス帳には追加されませんが、私のアドレス帳には保存されます。応用。

.vcf ファイルが生成されたら、この vcard を次のように送信できます

Intent i = new Intent();
i.setAction(android.content.Intent.ACTION_VIEW);
i.setDataAndType(Uri.parse("**generated.vcf**"), "text/x-vcard");
startActivity(i);

しかし、この生成された .vcf ファイルを取得する方法がわかりません。

4

2 に答える 2

27

実際、.vcf ファイルを生成するのは非常に簡単です。VCF 形式を見てください。これは単純なテキスト ファイルです。テキスト ファイルを作成し、VCF フィールドを使用して情報を書き込むだけです。次のような結果になります。

Person p = getPerson();

File vcfFile = new File(this.getExternalFilesDir(null), "generated.vcf");
FileWriter fw = new FileWriter(vcfFile);
fw.write("BEGIN:VCARD\r\n");
fw.write("VERSION:3.0\r\n");
fw.write("N:" + p.getSurname() + ";" + p.getFirstName() + "\r\n");
fw.write("FN:" + p.getFirstName() + " " + p.getSurname() + "\r\n");
fw.write("ORG:" + p.getCompanyName() + "\r\n");
fw.write("TITLE:" + p.getTitle() + "\r\n");
fw.write("TEL;TYPE=WORK,VOICE:" + p.getWorkPhone() + "\r\n");
fw.write("TEL;TYPE=HOME,VOICE:" + p.getHomePhone() + "\r\n");
fw.write("ADR;TYPE=WORK:;;" + p.getStreet() + ";" + p.getCity() + ";" + p.getState() + ";" + p.getPostcode() + ";" + p.getCountry() + "\r\n");
fw.write("EMAIL;TYPE=PREF,INTERNET:" + p.getEmailAddress() + "\r\n");
fw.write("END:VCARD\r\n");
fw.close();

Intent i = new Intent();
i.setAction(android.content.Intent.ACTION_VIEW);
i.setDataAndType(Uri.fromFile(vcfFile), "text/x-vcard");
startActivity(i);

(このコードはアクティビティ内に配置されることに注意してください。アクティビティ内にない場合は、 のthis前のgetExternalFilesDirを のインスタンスに置き換えますContext。)

必要に応じて、フィールドを増やしたり減らしたりすることができます。,フィールド値に;または文字がある場合、それらは;\でエスケープする必要があります。\改行文字を値に入れるには\\n、ファイルに書き込みます (つまり、ファイル自体に が含まれている必要があります\n。2 番目のスラッシュは、改行のスラッシュをエスケープするためのものです)。

このコードは非常に粗雑ですが、これで始められるはずです。繰り返しますが、VCF のフォーマットを見て、そこから進んでください。

更新:元の回答の間違いを指摘してくれた @Michael に感謝します。

于 2012-12-04T12:15:52.840 に答える
4

vCard 文字列を手動で作成する代わりに、vCard ライブラリを使用することに関心があるかもしれません。そうすれば、どの文字をエスケープするかなど、すべてのフォーマットの詳細を気にする必要がなくなります。 ez-vcardはそのようなライブラリの 1 つです。

ez-vcard を使用すると、@AleksG のコード サンプルの vCard は次のように生成されます。

Person p = getPerson();

File vcfFile = new File(this.getExternalFilesDir(null), "generated.vcf");

VCard vcard = new VCard();
vcard.setVersion(VCardVersion.V3_0);

StructuredNameType n = new StructuredNameType();
n.setFamily(p.getSurname());
n.setGiven(p.getFirstName());
vcard.setStructuredName(n);

vcard.setFormattedName(new FormattedNameType(p.getFirstName() + " " + p.getSurname()));

OrganizationType org = new OrganizationType();
org.addValue(p.getCompanyName());
vcard.setOrganization(org);

vcard.addTitle(new TitleType(p.getTitle()));

TelephoneType tel = new TelephoneType(p.getWorkPhone());
tel.addType(TelephoneTypeParameter.WORK));
tel.addType(TelephoneTypeParameter.VOICE));
vcard.addTelephoneNumber(tel);

tel = new TelephoneType(p.getHomePhone());
tel.addType(TelephoneTypeParameter.HOME));
tel.addType(TelephoneTypeParameter.VOICE));
vcard.addTelephoneNumber(tel);

AddressType adr = new AddressType();
adr.setStreetAddress(p.getStreet());
adr.setLocality(p.getCity());
adr.setRegion(p.getState());
adr.setPostalCode(p.getPostcode());
adr.setCountry(p.getCountry());
adr.addType(AddressTypeParameter.WORK);
vcard.addAddress(adr);

EmailType email = new EmailType(p.getEmailAddress());
email.addType(EmailTypeParameter.PREF);
email.addType(EmailTypeParameter.INTERNET);
vcard.addEmail(email);

vcard.write(vcfFile);

Intent i = new Intent();
i.setAction(android.content.Intent.ACTION_VIEW);
i.setDataAndType(Uri.fromFile(vcfFile), "text/x-vcard");
startActivity(i);
于 2012-12-05T16:56:55.120 に答える