2010-09-27 12 views
18

में ईमेल भेजना हम जैसे Intent.ACTION_SEND का उपयोग कर पंजीकृत ईमेल आवेदन लागू करेगा कभी हम Android में एक ई-मेल भेजने की जरूरत है जब का उद्देश्य क्या हैStartActivity में Intent.createChooser()() का उपयोग करते समय एंड्रॉयड

Intent i = new Intent(Intent.ACTION_SEND); 
startActivity(Intent.createChooser(i, "Send mail...")); 
नीचे

मेरा संदेह है कि हमें startActivty(i) का उपयोग करने के बजाय प्रारंभिकता में Intent.createChooser का उपयोग करने की आवश्यकता क्यों है। क्या Intent.createChooser() का उपयोग करने का कोई विशिष्ट कारण है?

उत्तर

10

चयनकर्ता उपयोगकर्ता को डिफ़ॉल्ट से एक और मेल एप्लिकेशन चुनने में सक्षम बनाता है। यदि आप सामान्य जीमेल (निजी) और ईमेल (काम से संबंधित) का उपयोग करते हैं और आप यह चुनना चाहते हैं कि कौन सी लेना है तो यह बहुत उपयोगी है।

हमेशा उपयोग किया जाना चाहिए ...

+0

लेकिन मेल के साथ आवेदन, मैसेजिंग एप्लिकेशन भी पॉप अप हो रहा है यदि मेरे डिवाइस में केवल एक मेल एप्लिकेशन है। तो केवल एक आवेदन को प्रतिबंधित करने के लिए यानी –

+2

@Android_programmer_camera के इरादे में केवल मेल एप्लिकेशन लॉन्च किया जाए: कृपया प्रयोक्ता को जो भी चाहें उसे भेजने की अनुमति दें। आपको ऐसा क्यों लगता है कि आपको उपयोगकर्ता के विकल्पों को सीमित करने की आवश्यकता है? – CommonsWare

+0

अरे, मुझे नहीं मिला। क्या आप इसे समझा सकते हैं? –

8

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

Intent i = new Intent(Intent.ACTION_SEND); 
i.setType("message/rfc822"); 
startActivity(Intent.createChooser(i, "Send mail...")); 

चयनकर्ता संवाद को अधिक क्लीनर बनाता है।

4

यदि आप createChooser() का उपयोग नहीं करते हैं, तो सिस्टम अभी भी चयनकर्ता संवाद पेश करेगा जब तक कि उपयोगकर्ता ने पहले से ही अपना निर्णय व्यक्त नहीं किया है कि दिए गए कार्य के लिए किस प्रोग्राम को उपयोग करना है (या उन्होंने अपना पिछला निर्णय वापस ले लिया है)।

यदि आप createChooser() का उपयोग करते हैं, तो सिस्टम हमेशा संवाद प्रस्तुत करेगा, भले ही पहले से ही व्यक्त वरीयता हो।

तो, दोनों बिल्कुल सही हैं, आपको यह तय करना होगा कि किसी भी मामले में किस का उपयोग करना है। आपका माइलेज भिन्न हो सकता है, लेकिन मूल रूप से, यदि आप किसी टेक्स्ट, एक छवि, वीडियो या डिस्प्ले या एडिटिंग के समान प्रारूप प्रदान करते हैं, तो संभवतः आप createChooser() को छोड़ना चाहते हैं ताकि जो भी उपयोगकर्ता पहले से ही पसंद कर सके, तुरंत शुरू हो सके। दूसरी तरफ, यदि आप कुछ ऐसा साझा करना चाहते हैं जिसे आप उपयोगकर्ता को एक अलग स्थापित प्रोग्राम (कहें, एक ई-मेल, फेसबुक, चैट, जो कुछ भी भेजें) के साथ संभालने की उम्मीद करते हैं, तो आप शायद इसे बनाने के लिए createChooser() का उपयोग करना चाहते हैं अपने उपयोगकर्ता के लिए फ्लाई पर चयन करना आसान है।

15

AFAIK, अगर आप Intent.createChooser उपयोग करते हैं, वहाँ तीन अलग-अलग हैं:

  1. आप चयनकर्ता संवाद का शीर्षक यह अधिक स्पष्ट रूप से बनाने के लिए निर्दिष्ट कर सकते हैं।

  2. सिस्टम हमेशा चयनकर्ता संवाद दिखाई देगा, यहां तक ​​कि उपयोगकर्ता ने डिफ़ॉल्ट को चुना है।

  3. यदि Intent.createChooser द्वारा बनाया गया आपका इरादा किसी भी गतिविधि से मेल नहीं खाता है, तो सिस्टम अभी भी निर्दिष्ट शीर्षक और एक त्रुटि संदेश No application can perform this action के साथ एक संवाद दिखाई देगा। या सामान्य आशय के लिए, आप के साथ एक एंड्रॉयड रनटाइम त्रुटि प्राप्त हो सकता है: Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent

+1

यह तीसरे बिंदु के बारे में है। ActivityNotFoundException केवल तब प्राप्त होगा जब आप Intent.createChooser के बजाय सामान्य इरादा का उपयोग करेंगे। यह Intent.createChooser का उपयोग करने का एक और फायदा है। आप इसके अनुसार तीसरा बिंदु बदल सकते हैं। –

+0

@RaghuRamiReddy धन्यवाद, मैंने अपनी पोस्ट संपादित की है। – Euporie

-1

मैं व्यक्तिगत रूप से उपयोग करें: यदि उपयोगकर्ता डिफ़ॉल्ट है

try { 
       startActivity(i); 
      } catch (ActivityNotFoundException e){ 
       startActivity(Intent.createChooser(i, null)); 
      } 

तो यह डिफ़ॉल्ट का उपयोग करेगा, "कोई एप्लिकेशन" पॉपअप जाएगा खिड़की अगर कोई ऐप। दोनों खुश हैं।

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