我想生成包含联系信息,如姓名,图像,电话号码,传真号码,电子邮件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);
但我没有得到如何得到这个生成的.vcf文件?
这其实很容易产生一个.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
,第二斜线是转义的换行符斜线)。
此代码是很粗糙,但它应该让你开始。 再次,看看VCF格式,并从那里走。
更新:感谢@迈克尔在我原来的答案,指出错误。
您可能会感兴趣使用电子名片库,而不是手工创建的电子名片字符串。 这样一来,您不必担心所有格式细节,比如哪些字符逃跑。 EZ-vcard的是一个这样的库。
使用EZ-电子名片,@ AleksG的代码示例中的电子名片会像这样产生:
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);
文章来源: How to generate a .vcf file from an object which contains contact detail and object is not in the phone book