Android निहित इरादे वीएस स्पष्ट इरादों




android-intent android-implicit-intent (6)

एंड्रॉइड के साथ काम करते हुए मैंने महसूस किया कि अंतर्निहित मामलों में उनके लचीलेपन के कारण ज्यादातर मामलों में अच्छा विकल्प है। लेकिन स्पष्ट इरादों के बारे में क्या है? उनका उपयोग करने के क्या लाभ हैं? जब उनका उपयोग करना एक अच्छा अभ्यास है तो सामान्य मामले क्या हैं?


जब आप जानते हैं और जब आप नहीं जानते हैं

स्पष्ट आशय: स्पष्ट आशय का उपयोग करें जब आप जानते हैं कि कौन सी गतिविधि आपके अनुरोध को संभाल सकती है।
एक बहुत ही सामान्य उदाहरण होगा, आपके पास एक सूची गतिविधि है और जब आप सूची में किसी आइटम पर क्लिक करते हैं तो यह एक विस्तृत गतिविधि खोलती है। इस स्थिति में, आप जानते हैं कि सूची आइटम को आपके आवेदन की DetailActivity.class (या com.yourpackage.DetailActivity) द्वारा दिखाया या संभाला जा सकता है। इसलिए आप एक पूर्ण पैकेज नाम देकर गतिविधि शुरू करते हैं

startActivity(this,com.yourPackage.DetaiActivy.class);

इंप्लिमेंट इंटेंट : जब आपको पता नहीं होता है कि कौन सी एप्लीकेशन किस एक्टिविटी से आपकी रिक्वेस्ट ( ACTION ) को हैंडल कर सकती है। तब आप कार्य को OS पर छोड़ देते हैं।
उदाहरण: आपके पास गीत आइटम की एक सूची है और जब आप किसी आइटम पर क्लिक करते हैं तो उसे गाना बजाना चाहिए। आप नहीं जानते कि आपके अनुरोध को कौन संभाल सकता है ताकि आप ओएस को इसके लिए निर्णय लेने दें।

इस मामले में
1) आप एक आशय लिखते हैं
2) क्रिया जोड़ें
3) गतिविधि शुरू करें

intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(songPath);

OS कैसे तय करता है?

उसके लिए एक शब्द है, जिसे इंटेंट रिज़ॉल्यूशन कहा जाता है।
इंटेंट रेजोल्यूशन में OS आपके इरादे में निर्दिष्ट एक्शन लेता है और PackageManager में चला जाता है और आपके डिवाइस में इंस्टॉल किए गए सभी एप्लिकेशन के इरादे फिल्टर के साथ सभी पंजीकृत गतिविधियों को देखता है। फिर यह पॉप अप को उचित अनुप्रयोगों की सूची के साथ दिखाता है। तो निहित आशय लिखने का सुरक्षित तरीका यही है

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(songPath);
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}

उस पॉपअप सूची के अंदर अपना आवेदन कैसे प्राप्त करें?

मान लीजिए कि आप फाइल एक्सप्लोरर में हैं और आप एक म्यूजिक फाइल पर क्लिक करते हैं तो कुछ कार्रवाई और अतिरिक्त डेटा के साथ एक निहित आशय हो जाता है। यदि आप चाहते हैं कि आपके एप्लिकेशन को एप्लिकेशन की सूची में जोड़ा जाए, तो आपको AndroidManifest.nml फ़ाइल में एक्शन के साथ एक इरादे वाला फ़िल्टर पंजीकृत करना होगा। इस प्रकार सं।

<application
    .....  >

    ......
    <activity android:name=".MusicActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <data android:type="audio/*" />
        </intent-filter>
    </activity>
 ..... 


</application>

संदर्भ
आम इरादों और कार्रवाई की सूची
इरादे फिल्टर और इरादे संकल्प पर अधिक


  1. निहित इरादे - जब हम किसी विशेष कार्य को करने के इरादे से सिस्टम के घटकों को कॉल करना चाहते हैं और हम वास्तव में उपयोग किए जाने वाले घटकों का नाम नहीं जानते हैं, तो एंड्रॉइड सिस्टम कार्य करने के लिए अनुप्रयोगों की वांछित सूची दिखाएगा।
  2. स्पष्ट आशय - जब हम गतिविधि के पूर्ण योग्य नाम के साथ किसी अन्य गतिविधि को कॉल करना चाहते हैं और निश्चित रूप से हम गतिविधि का नाम जानते हैं।

1) स्पष्ट आशय: घटक का नाम डेवलपर को पता है, इसलिए आशय में निर्दिष्ट नाम।

2) इंप्लीमेंट इंटेंट: इंटेंट में कोई कंपोनेंट निर्दिष्ट नहीं है।


अंतर्निहित इरादे सीधे एंड्रॉइड घटकों को निर्दिष्ट नहीं करते हैं जिन्हें कॉल किया जाना चाहिए, यह केवल प्रदर्शन की जाने वाली कार्रवाई को निर्दिष्ट करता है। डेटा प्रकार निर्दिष्ट करने के लिए अंतर्निहित इरादे के साथ एक उरी का उपयोग किया जा सकता है।

उदाहरण के लिए

Intent intent = new Intent(ACTION_VIEW,Uri.parse("http://www.google.com"));

यह वेब ब्राउज़र को वेबपेज खोलने का कारण बनेगा। एंड्रॉइड सिस्टम उन सभी घटकों की खोज करता है, जो विशिष्ट कार्रवाई और डेटा प्रकार के लिए पंजीकृत हैं। यदि कई घटक पाए जाते हैं, तो उपयोगकर्ता उस सामग्री का चयन कर सकता है, जिसे सामग्री के लिए जाना जाता है।

स्पष्ट इरादों का उपयोग उस एप्लिकेशन में किया जाता है जिसमें एक गतिविधि अन्य गतिविधि पर स्विच कर सकती है ... उदाहरण Intent intent = new Intent(this,Target.class); यह गतिविधि के वर्तमान संदर्भ से लक्ष्य गतिविधि पर स्विच करने का कारण बनता है। putExtra का उपयोग putExtra विधि का उपयोग करके अन्य गतिविधि के लिए डेटा पास करने के लिए किया जा सकता है और getIntent().getExtras() विधियों द्वारा लक्ष्य गतिविधि द्वारा पुनर्प्राप्त किया जा सकता है।

आशा है कि इससे मदद मिली।


बस हम इस तरह दोनों इरादों का वर्णन कर सकते हैं ..

स्पष्ट इरादे: वे एक ही आवेदन में दो गतिविधियों के बीच संचार के लिए उपयोग किया जाता है।

उदाहरण: एक आवेदन पर विचार करें जिसमें एक लॉगिन पृष्ठ होता है जिसमें दो फ़ील्ड होते हैं (उपयोगकर्ता नाम और पासवर्ड कहें)। यदि दोनों सत्य हैं तो यह हमें उस पृष्ठ पर ले जाएगा जो उपयोगकर्ता नाम फ़ील्ड को प्रदर्शित करता है जिसे हमने पहले दर्ज किया था। इस मामले में हम स्पष्ट इरादों का उपयोग करते हैं हमें एक ही एप्लिकेशन में गतिविधियों को बदलने और एक गतिविधि से दूसरी गतिविधि (उपयोगकर्ता नाम फ़ील्ड) तक डेटा ले जाने की आवश्यकता है।

इंप्लिमेंट इंटेंट्स: इनका उपयोग विभिन्न अनुप्रयोगों की दो गतिविधियों के बीच संचार के लिए किया जाता है।

उदाहरण: एक समाचार ऐप पर विचार करें जो एक दुर्घटना के बारे में बताता है जिसमें दुर्घटना का वीडियो फेसबुक में रिकॉर्ड और अपलोड किया गया है। समाचार ऐप में दिए गए लिंक पर क्लिक करते समय यह हमें फेसबुक पर निर्देशित करेगा। इस मामले में संचार समाचार ऐप में एक गतिविधि और फेसबुक ऐप में एक गतिविधि के बीच है। इस उद्देश्य के लिए हम इंप्लिक्ट इंटेंट्स का उपयोग करते हैं।

मुझे लगता है आप समझेंगे।


Docs :

दो प्रकार के इरादे हैं:

  • स्पष्ट इरादे घटक को नाम से शुरू करने के लिए निर्दिष्ट करते हैं (पूरी तरह से योग्य वर्ग नाम)। आप आम तौर पर अपने ऐप में एक घटक शुरू करने के लिए एक स्पष्ट इरादे का उपयोग करेंगे, क्योंकि आप उस गतिविधि या सेवा का वर्ग नाम जानते हैं जिसे आप शुरू करना चाहते हैं। उदाहरण के लिए, आप उपयोगकर्ता की कार्रवाई के जवाब में एक नई गतिविधि शुरू कर सकते हैं या पृष्ठभूमि में एक फ़ाइल डाउनलोड करने के लिए एक सेवा शुरू कर सकते हैं।
  • अंतर्निहित इरादों में एक विशिष्ट घटक का नाम नहीं होता है, बल्कि प्रदर्शन करने के लिए एक सामान्य कार्रवाई की घोषणा करता है, जो एक घटक को दूसरे ऐप से इसे संभालने की अनुमति देता है। उदाहरण के लिए, यदि आप उपयोगकर्ता को किसी मानचित्र पर कोई स्थान दिखाना चाहते हैं, तो आप एक अंतर्निहित इरादे का उपयोग करके अनुरोध कर सकते हैं कि कोई अन्य सक्षम ऐप किसी मानचित्र पर निर्दिष्ट स्थान दिखाएगा।




explicit-intent