2012-12-04 14 views
5

İsim, görüntü, telefon numarası, faks numarası gibi iletişim bilgilerini içeren bir nesne için bir .vcf dosyası oluşturmak istiyorum , e-posta kimliği, adres vb. Bu nesne telefonun adres defterine eklenmez, ancak benim uygulamamda saklanır.İletişim detayını içeren bir nesneden .vcf dosyası nasıl oluşturulur ve nesne telefon defterinde değil

benim .vcf dosyası bu

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

gibi bu kartvizitini gönderebilirsiniz üretilir Ama bu .vcf dosyasını oluşturulan nasıl almıyorum kez?

+0

sorununuzu ayrıntılı. Nesne nedir? kişi listesini getirdin mi? vcard oluşturdunuz mu? –

+0

@SahilMahajanMj OP'nin, içinde bir kişinin bilgisi olan _an_ nesnesine sahip olduğu ve bunun dışında bir vcf oluşturmak istediği anlamına geldiğini düşünüyorum; Bu bilginin telefonun kişiyle ilgisi yoktur. –

cevap

19

Aslında bir .vcf dosyası oluşturmak oldukça kolaydır. VCF format bir göz atın - bu basit bir metin dosyası. Tek yapmanız gereken VCF alanları kullanarak metin dosyası oluşturmak ve içine bilgi yazmaktır. Böyle bir şey ile son edeceğiz:

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

(Bu kod bir faaliyet içine yerleştirilmek üzere olduğunu unutmayın bir aktivitede değilse, o zaman Context bir örneğiyle getExternalFilesDir önünde this değiştirin..

Gerektiğinde daha az alana sahip olabilirsiniz. Alan değerlerinde ,, ; veya \ karakterleriniz varsa, bunlar \; bir satırsonu karakterini bir değere koymak için, dosyaya \\n yazınız (yani dosyanın kendisi \n'u içermelidir, ikinci eğik çizgi yeni satırdaki çizgiden kaçmak içindir).

Bu kod gayet kaba ancak başlamanızı sağlamalı. Yine, VCF formatına bir göz atın ve oradan gidin.

Güncelleme: @Michael, orijinal cevaplarımdaki hataları işaret ettiğinden dolayı teşekkür ederiz.

+0

+1, iyi bir açıklama. .vcf dosyasını bir mms olarak gönderecek mi? Bazı telefonlar (android dışında), mms desteklemediğinden, diğer telefona sms olarak vcard dize göndermek için herhangi bir yol yoktur. –

+0

@SahilMahajanMj Bu soru bir VCF'nin nasıl gönderileceğiyle değil, nasıl oluşturulacağıyla ilgilidir. [Bu soruya] bir göz atın (http://stackoverflow.com/questions/10420312/android-how-to-attach-file-to-sms). –

+0

Bu sorudan bahsetmiyorum. Sadece sms olarak nasıl gönderileceğini biliyor musun diye soruyordum. –

4

vCard dizesini el ile oluşturmak yerine bir vCard kitaplığı kullanmak isteyebilirsiniz. Bu şekilde, hangi karakterlerin kaçacağı gibi tüm biçimlendirme ayrıntıları konusunda endişelenmenize gerek yok. ez-vcard, böyle bir kitaplıktır. ez-vcard kullanma

, @ AleksG kod örneğinde vCard şöyle oluşturulabilir olacaktır:

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-dosya-android @Michael –

İlgili konular