2012-12-04 6 views
5

में नहीं है, मैं उस ऑब्जेक्ट के लिए .vcf फ़ाइल जेनरेट करना चाहता हूं जिसमें नाम, छवि, फोन नंबर, फैक्स नंबर जैसी संपर्क जानकारी शामिल है , ईमेल आईडी, पता इत्यादि। यह ऑब्जेक्ट फोन की एड्रेस बुक में नहीं जोड़ा गया है लेकिन यह मेरे आवेदन में संग्रहीत है।किसी ऑब्जेक्ट से .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

आपकी समस्या को विस्तार से बताएं। वस्तु क्या है। क्या आपने संपर्क सूची प्राप्त की है? क्या आपने वीकार्ड बनाया है? –

+0

@ साहिल महाजन एमजे मुझे लगता है कि ओपी का मतलब है कि उसके पास कुछ व्यक्ति की जानकारी के साथ _an_ वस्तु है और वह इसमें से एक वीसीएफ बनाना चाहता है; इस जानकारी के फोन के संपर्कों से कोई लेना देना नहीं है। –

उत्तर

19

यह वास्तव में एक .vcf फ़ाइल उत्पन्न करना काफी आसान है। VCF format पर एक नज़र डालें - यह एक साधारण पाठ फ़ाइल है। आपको बस इतना करना है कि वीसीएफ फ़ील्ड का उपयोग करके टेक्स्ट फ़ाइल बनाएं और इसमें जानकारी लिखें। आप कुछ इस तरह से खत्म करेंगे:

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 होना चाहिए, दूसरा स्लैश नई लाइन में स्लैश से बचने के लिए है)।

यह कोड काफी कच्चा है, लेकिन इसे आपको प्रारंभ करना चाहिए। फिर, वीसीएफ के प्रारूप पर एक नज़र डालें और वहां से जाएं।

अद्यतन: मेरे मूल उत्तरों में गलतियों को इंगित करने के लिए @ माइकल के लिए धन्यवाद।

+0

+1, अच्छी व्याख्या। यह एक एमएमएस के रूप में .vcf फ़ाइल भेज देगा। अन्य फोन पर एसएमएस के रूप में vcard स्ट्रिंग भेजने का कोई तरीका है, क्योंकि कुछ फोन (एंड्रॉइड के अलावा) एमएमएस का समर्थन नहीं करते हैं। –

+0

@ साहिल महाजन एमजे यह प्रश्न वीसीएफ को कैसे भेजना है, बल्कि इसके बारे में कैसे उत्पन्न करना है इसके बारे में नहीं है। एसएमएस द्वारा भेजने के संबंध में [इस सवाल] पर एक नज़र डालें (http://stackoverflow.com/questions/10420312/android-how-to-attach-file-to-sms)। –

+0

मैं इस प्रश्न के बारे में बात नहीं कर रहा हूं। मैं सिर्फ यह पूछ रहा था कि क्या आप इसे एसएमएस के रूप में भेजना चाहते हैं। –

4

आप हाथ से vCard स्ट्रिंग बनाने के बजाय vCard लाइब्रेरी का उपयोग करने में रुचि ले सकते हैं। इस तरह, आपको सभी स्वरूपण विवरणों के बारे में चिंता करने की ज़रूरत नहीं है, जैसे कि कौन से पात्र बचने के लिए। ez-vcard ऐसी एक पुस्तकालय है।

ईज़ी-vcard का उपयोग करना, @ AleksG के कोड नमूने में vCard इसलिए की तरह उत्पन्न होगा:

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- जानकारी -एएस-वीसीएफ-फाइल-इन-एंड्रॉइड @ माइकल –

संबंधित मुद्दे