2009-12-29 15 views
5

मैं एक ऐप लॉन्च करना चाहता हूं जिसे उपयोगकर्ता मेरे आवेदन के भीतर से चुनता है। हालांकि, मुझे यकीन नहीं है कि मैं ऐसा करने के बारे में कैसे जाऊंगा। मैंने यह कोशिश की है:मेरे ऐप से बाहरी एप्लिकेशन लॉन्च करना

Intent intent = new Intent(); 
intent.setAction(Contacts.Intents.SHOW_OR_CREATE_CONTACT); 
startActivity(intent); 

लेकिन ऐसा लगता है कि यह एक त्रुटि और बल मेरे आवेदन को बंद कर देता है। मैंने यह भी जोड़ने की कोशिश की:

<action android:name="Contacts.Intents.SHOW_OR_CREATE_CONTACT"/> 

AndroidManifest फ़ाइल में, लेकिन इसका कोई फायदा नहीं हुआ।

लॉगकैट पर एक नज़र से पता चलता है कि यह एक "IOexception - ऐसी कोई फ़ाइल या निर्देशिका नहीं है"। इससे कुछ प्रश्न उठते हैं। मैंने एंड्रॉइड दस्तावेज़ों के माध्यम से पढ़ा और देखा कि Contact.Intents क्लास को बहिष्कृत किया गया है। हालांकि, यह उत्तराधिकारी है, ContactContracts का उद्देश्य एपीआई स्तर 5 पर है जबकि मैं एपीआई स्तर 3 को लक्षित कर रहा हूं। क्या यह समस्या हो सकती है? इसके अलावा, मैंने इस एप्लिकेशन को कोड में हार्डकोड किया है। क्या उपयोगकर्ता द्वारा चुने गए किसी भी एप्लिकेशन के इरादे को पुनः प्राप्त करने का कोई तरीका है ताकि उन्हें लॉन्च किया जा सके?

उत्तर

7

आप उद्देश्य के बारे में अतिरिक्त जानकारी भेजने के लिए एंड्रॉयड क्या बताने के लिए आप दिखाना या बनाना चाहते हैं की जरूरत है। अन्यथा एंड्रॉइड नहीं जानता कि कौन सी गतिविधि शुरू होनी चाहिए और (संभवतः आपके मामले में) ActivityNotFoundException फेंकता है।

संपर्क के लिए, आप सामान्य Intent.ACTION_INSERT_OR_EDIT का उपयोग करते हैं, फिर एक व्यक्तिगत संपर्क के MIME प्रकार का उपयोग करें (Contacts.People.CONTENT_ITEM_TYPE)।

उदाहरण के लिए:

Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT); 
intent.setType(People.CONTENT_ITEM_TYPE); 
intent.putExtra(Contacts.Intents.Insert.PHONE, "+1234567890"); 
intent.putExtra(Contacts.Intents.Insert.PHONE_TYPE, Contacts.PhonesColumns.TYPE_MOBILE); 

कि संपर्कों एप्लिकेशन को लाएगा, करने के लिए फ़ोन नंबर जोड़ने के लिए, या एक नया संपर्क बनाने के लिए किसी मौजूदा संपर्क का चयन करने के उत्साह।

बाहरी गतिविधियों को शुरू करने के लिए आपको अपने मैनिफेस्ट में कुछ विशेष जोड़ने की आवश्यकता नहीं है। केवल तभी जब आप सीधे ContentProvider संपर्कों में हेरफेर करना चाहते हैं तो आपको अपने मैनिफेस्ट में उचित संपर्क अनुमतियां जोड़नी होंगी।

+0

धन्यवाद, यह काम किया! क्या इसका मतलब यह है कि मुझे हर एप्लिकेशन के लिए अतिरिक्त पैरामीटर हार्डकोड करना होगा? – keyboardP

+0

अच्छी तरह से आपको यह जानना होगा कि आग का इरादा क्या है, इसलिए उस अर्थ में आपको कुछ मूल्यों में हार्डकोड करना होगा। लेकिन आप एक आवेदन नाम या कुछ भी कड़ी मेहनत नहीं कर रहे हैं, बस एक इरादा कार्रवाई। तो एक छवि देखने के लिए (बिना किसी ऐप को संभालने के बिना), आप कर सकते हैं: 'नया इरादा (Intent.ACTION_VIEW, Uri.parse ("सामग्री: //foo/example/me.jpg")); ' और जब तक कोई ऐसा ऐप है जो जेनेरिक 'VIEW' एक्शन और एक जेपीईजी फ़ाइल प्रकार के कॉम्बो को संभाल सकता है, तो आपको बस इतना ही चाहिए। –

+0

आह, मुझे अब मिल गया है। यह इसे बहुत आसान बनाता है :)। सहायता के लिए धन्यवाद। – keyboardP

0

आपको अपने द्वारा शुरू किए गए ऐप्स पर मान्य तर्कों को पारित करने की आवश्यकता है। बहुत सारे ऐप्स डेटा यूआरआई और/या कुछ अतिरिक्त डेटा मान्य होने की अपेक्षा करते हैं।

0

निम्नलिखित कोड का प्रयास करें:

आशय आशय = नए आशय (Contacts.Intents.SHOW_OR_CREATE_CONTACT);

यह। प्रारंभिकता (इरादा);

(खेद है कि वहाँ कुछ वाक्य रचना पर गलत है, मैं न इस कंप्यूटर में एंड्रॉयड है)

और प्रकट से कार्रवाई को हटा दें। इसकी आवश्यकता नहीं है। किसी अन्य चीज़ के लिए क्रिया विधि का उपयोग किया जाता है। अधिक जानकारी के लिए, कृपया Android साइट को देखने के: http://developer.android.com/reference/android/content/Intent.html

डैनियल

+0

जो स्ट्रिंग आप 'इराद' कन्स्ट्रक्टर * में पास करते हैं * कार्रवाई है; मूल कोड स्निपेट सही है (यदि आपने जो लिखा है उसका एक अनिवार्य वर्बोज़ संस्करण)। –

1

मैं उस उद्देश्य के लिए इस कोड का उपयोग:

Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.setClassName("com.android.settings", "com.android.settings.Settings"); 
startActivity(intent); 

इस सेटिंग एप्लिकेशन का शुभारंभ करेंगे, आप भी इन का उपयोग कर सकते हैं:

intent.setClassName("com.android.music", "com.android.music.MediaPlaybackActivityStarter"); 
intent.setClassName("com.android.contacts", "com.android.contacts.DialtactsContactsEntryActivity"); 
intent.setClassName("com.android.contacts", "com.android.contacts.DialtactsActivity"); 

पहले डिफ़ॉल्ट संगीत एप्लिकेशन शुरू होता है, दूसरा संपर्क, और तीसरा डायलर। उम्मीद है कि यह मदद करता है।

+0

ध्यान दें कि आप चीजों का उपयोग कर सकते हैं जैसे: नया इरादा (android.provider.Settings.ACTION_SETTINGS) –

0

जो गतिविधि आप कॉल कर रहे हैं वह न केवल अपने स्वयं के पैकेज के लिए मेनिफेस्ट में दिखाई देनी चाहिए, बल्कि कैलिलिंग पैकेज के लिए मेनिफेस्ट में भी दिखाई देनी चाहिए।

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