2012-12-04 6 views
5

Chcę wygenerować plik .vcf dla obiektu, który zawiera dane kontaktowe takie jak imię, obraz, numer telefonu, numer faksu , adres e-mail, adres itp. Ten obiekt nie jest dodawany w książce adresowej telefonu, ale jest przechowywany w mojej aplikacji.Jak wygenerować plik .vcf z obiektu, który zawiera szczegóły kontaktu i obiekt, nie ma w książce telefonicznej

Raz mój plik .vcf jest generowany mogę wysłać vCard jak ten

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

Ale ja nie otrzymuję, jak uzyskać ten generowany vcf plik?

+0

opracować swój problem. co to jest obiekt? Czy pobrałeś listę kontaktów? czy stworzyłeś vcard? –

+0

@SahilMahajanMj Myślę, że OP oznacza, że ​​ma on obiekt z danymi osoby i chce utworzyć z niego vcf; ta informacja nie ma nic wspólnego z kontaktami telefonu. –

Odpowiedz

19

Generowanie pliku .vcf jest dość łatwe. Spójrz na VCF format - to prosty plik tekstowy. Wszystko, co musisz zrobić, to stworzyć plik tekstowy i zapisać w nim informacje za pomocą pól VCF. Będziesz skończyć z czymś takim:

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

(Zauważ, że ten kod jest do umieszczenia wewnątrz aktywności Jeżeli nie jest to działalność, a następnie zastąpić this przed getExternalFilesDir z instancją Context..)

W razie potrzeby można mieć więcej mniejszej liczby pól. Jeśli masz wartości ,, ; lub \ w wartościach pól, muszą one zostać zastąpione wartością \; aby wstawić znak nowej linii do wartości, napisz \\n do pliku (to znaczy, że sam plik musi zawierać \n, drugi ukośnik służy do uniknięcia ukośnika w nowej linii).

Ten kod jest dość surowy, ale powinien zacząć. Ponownie, spójrz na format VCF i idź tam.

Aktualizacja: Dzięki @Michael za wskazanie błędów w moich oryginalnych odpowiedziach.

+0

+1, dobre wyjaśnienie. wyśle ​​plik .vcf jako mms.? czy jest jakikolwiek sposób, aby wysłać ciąg vcard jako sms do innego telefonu, ponieważ niektóre telefony (inne niż android) nie obsługują mms. –

+0

@SahilMahajanMj To pytanie nie dotyczy wysyłania VCF, ale raczej sposobu jego wygenerowania. Spójrz na [to pytanie] (http://stackoverflow.com/questions/10420312/android-how-to-attach-file-to-sms) dotyczące wysyłania go przez SMS. –

+0

Nie mówię o tym pytaniu. Właśnie pytałem, czy wiesz, jak wysłać to jako SMS. –

4

Być może zainteresuje Cię używanie biblioteki vCard zamiast ręcznego tworzenia ciągu vCard. W ten sposób nie musisz się martwić wszystkimi szczegółami formatowania, takimi jak znaki, które mają uciec. ez-vcard jest jedną z takich bibliotek.

Korzystanie EZ-vCard, vCard w użytkownika @ AleksG próbki kodu byłyby generowane tak:

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 –

Powiązane problemy