2012-12-04 4 views
5

名前、画像、電話番号、FAX番号などの連絡先情報を含むオブジェクトの.vcfファイルを生成します。 、電子メールのID、アドレスなどが含まれます。このオブジェクトは電話のアドレス帳には追加されませんが、アプリケーションに保存されます。連絡先の詳細とオブジェクトを含むオブジェクトから.vcfファイルを生成する方法は電話帳にありません

私の.vcfファイルが生成されたら、私はこの

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

のように、このvCardのを送ることができますしかし、私は、これはの.vcfファイルを生成し取得する方法を得ていないのですか?

+0

:EZ-のvCardを使用して、@ AleksGのコードサンプルでvCardがそうのように生成される

。オブジェクトは何ですか?連絡先リストを取得しましたか? vcardを作成しましたか? –

+0

@SahilMahajanMj私は、OPは彼がいくつかの人の情報を持ったオブジェクトを持っていることを意味し、彼はそこからvcfを作成したいと考えています。この情報は電話の連絡先とは関係ありません。 –

答えて

19

実際に.vcfファイルを生成するのはかなり簡単です。 VCF formatを見てください - それは単純なテキストファイルです。あなたがする必要があるのは、テキストファイルを作成し、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); 

(このコードは、アクティビティの内側に配置されるべきであることに注意してください、それが活動中でない場合は、ContextのインスタンスでgetExternalFilesDirの前でthisを交換してください。 )

必要に応じて、より多くのフィールドを追加することができます。フィールド値に,,;または\文字がある場合は、\でエスケープする必要があります。改行文字を値に入れるには、ファイルに\\nを書きます(つまり、ファイル自体には\nが含まれていなければなりません.2番目のスラッシュは改行のスラッシュをエスケープするためのものです)。

このコードは非常に粗末ですが、開始する必要があります。再度、VCFのフォーマットを見てそこから行ってください。

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

+0

+1、良い説明。 .vcfファイルをmmsとして送信しますか?いくつかの携帯電話(アンドロイド以外)がmmsをサポートしていないので、vcd文字列を他の電話機にSMSとして送る方法はありますか? –

+0

@SahilMahajanMjこの質問は、VCFを送信する方法ではなく、VCFを生成する方法についてです。 SMSで送信することに関して[この質問](http://stackoverflow.com/questions/10420312/android-how-to-attach-file-to-sms)を見てください。 –

+0

私はこの質問について話していません。私はちょうどあなたがSMSとしてそれを送る方法を知っているかどうか尋ねていた。 –

4

vCard文字列を手動で作成する代わりに、vCardライブラリを使用したい場合があります。そうすれば、どの文字をエスケープするかなど、すべての書式設定の詳細について心配する必要はありません。 ez-vcardはそのようなライブラリの1つです。あなたの問題を詳しく説明

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); 
+0

https://stackoverflow.com/questions/48123920/how-to-export-all-contact-informationをご確認ください。 -as-vcf-file-in-android @Michael –