2012-12-04 10 views
5

Ich möchte eine .vcf-Datei für ein Objekt generieren, das Kontaktinformationen wie Name, Bild, Telefonnummer, Faxnummer enthält , E-Mail-Adresse, Adresse usw. Dieses Objekt wird nicht im Adressbuch des Telefons hinzugefügt, aber es ist in meiner Anwendung gespeichert.Wie man eine .vcf-Datei von einem Objekt erzeugt, das Kontaktdetail enthält und Objekt nicht im Telefonbuch ist

Sobald meine VCF-Datei erzeugt wird, ich diese V-Card wie dieses

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

Aber ich bin nicht immer, wie diese VCF-Datei erzeugt zu bekommen?

+0

Ihr Problem erarbeiten. Was ist ein Objekt? hast du die Kontaktliste abgeholt? hast du vcard erstellt? –

+0

@SahilMahajanMj Ich denke, das OP bedeutet, dass er _an_ Objekt mit der Information einer Person darin hat und er will einen VCF daraus erstellen; Diese Information hat nichts mit den Kontakten des Telefons zu tun. –

Antwort

19

Es ist eigentlich ziemlich einfach, eine .vcf-Datei zu generieren. Werfen Sie einen Blick auf VCF format - es ist eine einfache Textdatei. Alles, was Sie tun müssen, ist eine Textdatei zu erstellen und Informationen in die VCF-Felder zu schreiben. Sie werden mit etwas am Ende wie folgt:

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

(Beachten Sie, dass dieser Code innerhalb einer Aktivität gesetzt werden soll, wenn es nicht in einer Aktivität ist, dann ersetzen this vor getExternalFilesDir mit einer Instanz von Context..)

Sie können bei Bedarf mehr Felder verwenden. Wenn Sie ,, ; oder \ Zeichen in Feldwerten haben, müssen sie mit \ maskiert werden; Um ein Newline-Zeichen in einen Wert zu schreiben, schreiben Sie \\n in die Datei (d. h. die Datei selbst muss \n enthalten, der zweite Schrägstrich dient zum Entfernen des Schrägstrichs in der Newline).

Dieser Code ist ziemlich grob, aber es sollte Ihnen den Anfang machen. Schauen Sie sich das Format von VCF an und gehen Sie von dort aus weiter.

Update: Dank @Michael für das Aufzeigen von Fehlern in meinen ursprünglichen Antworten.

+0

+1, gute Erklärung. wird es .vcf Datei als mms senden? Gibt es eine Möglichkeit, Vcard-String als SMS an andere Telefone zu senden, weil einige Telefone (anders als Android) nicht unterstützen mms. –

+0

@SahilMahajanMj In dieser Frage geht es nicht darum, wie man einen VCF sendet, sondern darum, wie man einen VCF erzeugt. Schauen Sie sich [diese Frage] (http://stackoverflow.com/questions/10420312/android-how-to-attach-file-to-sms) an, um es per SMS zu senden. –

+0

Ich spreche nicht über diese Frage. Ich habe nur gefragt, ob Sie wissen, wie man es als SMS sendet. –

4

Möglicherweise möchten Sie eine vCard-Bibliothek verwenden, anstatt die vCard-Zeichenfolge manuell zu erstellen. Auf diese Weise müssen Sie sich nicht um alle Formatierungsdetails sorgen, z. B. welche Zeichen zu entkommen sind. ez-vcard ist eine solche Bibliothek.

Mit ez-V-Card, die vCard in @ aleksg der Codebeispiel wie so erzeugt werden würde:

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