android - एंड्रॉइड लंबित इंटेंटेंट क्या है?




android-intent android-pendingintent (12)

एक PendingIntent एक टोकन है जिसे आप एक विदेशी एप्लिकेशन (जैसे NotificationManager PendingIntent , PendingIntent , होम स्क्रीन PendingIntent , या अन्य तृतीय पक्ष अनुप्रयोगों) को देते हैं, जो विदेशी एप्लिकेशन को कोड के पूर्वनिर्धारित टुकड़े को निष्पादित करने के लिए आपके एप्लिकेशन की अनुमतियों का उपयोग करने की अनुमति देता है

यदि आप विदेशी आवेदन को एक मंशा देते हैं, तो यह आपके Intent को अपनी अनुमतियों के साथ निष्पादित करेगा। लेकिन यदि आप विदेशी आवेदन को PendingIntent , तो वह एप्लिकेशन आपके आवेदन की अनुमति का उपयोग करके आपके Intent को निष्पादित करेगा।

मैं एंड्रॉइड के लिए नौसिखिया हूँ। मैंने एंड्रॉइड दस्तावेज़ीकरण पढ़ा लेकिन मुझे अभी भी कुछ और स्पष्टीकरण की आवश्यकता है। क्या कोई मुझे बता सकता है कि वास्तव में एक PendingIntent क्या है?


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

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

यदि आप विदेशी आवेदन को एक इरादा देते हैं, और वह एप्लिकेशन आपके द्वारा दिए गए इरादे को भेजता / प्रसारित करता है, तो वे अपनी अनुमति के साथ इरादे निष्पादित करेंगे। लेकिन यदि आप विदेशी आवेदन को अपनी अनुमति के जरिए बनाया गया एक लंबित इरादा देते हैं, तो वह एप्लिकेशन आपके आवेदन की अनुमति का उपयोग करके निहित इरादे को निष्पादित करेगा।

लंबित इरादे से प्रसारण करने के लिए लंबित INTent.getBroadcast () के माध्यम से लंबित इंटेंन्ट प्राप्त करें। लंबित इरादे से गतिविधि करने के लिए आपको लंबित INTent.getActivity () के माध्यम से गतिविधि प्राप्त होती है।

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

एक लंबित इंटेन्टेंट बनाकर आप लॉन्च करने के लिए उपयोग करना चाहते हैं, कहें, एक गतिविधि जब आपके पास ऐसा करने के लिए संदर्भ है (किसी अन्य गतिविधि या सेवा के अंदर से) आप अपने ऑब्जेक्ट का हिस्सा लॉन्च करने के लिए उस ऑब्जेक्ट को बाहरी से बाहर कर सकते हैं आपकी जगह।

एक लंबित इंटेन्टेंट काम करने के लिए एक साधन प्रदान करता है, यहां तक ​​कि उनकी प्रक्रिया समाप्त होने के बाद भी। यह ध्यान रखना महत्वपूर्ण है कि लंबित इंटेन्टेंट बनाने वाले एप्लिकेशन के बाद भी, यह इरादा अभी भी चल सकता है। इसके साथ प्रदर्शन करने के लिए एक इरादा और लक्ष्य कार्रवाई का विवरण। इस वर्ग के उदाहरण getActivity (संदर्भ, int, इरादा, int), getBroadcast (संदर्भ, int, इराद, int), getService (संदर्भ, int, इरादा, int) के साथ बनाए जाते हैं; लौटाई गई वस्तु को अन्य अनुप्रयोगों को सौंप दिया जा सकता है ताकि वे बाद में आपके द्वारा वर्णित कार्रवाई कर सकें।

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

एक लंबित इंटेन्टेंट केवल सिस्टम द्वारा बनाए गए टोकन का संदर्भ है जो इसे पुनर्प्राप्त करने के लिए उपयोग किए जाने वाले मूल डेटा का वर्णन करता है। इसका मतलब यह है कि, भले ही उसके स्वामित्व वाली एप्लिकेशन की प्रक्रिया मारे जाये, लंबित इंटेंन्ट स्वयं ही अन्य प्रक्रियाओं से उपयोग योग्य रहेगा। यदि निर्माण अनुप्रयोग बाद में उसी प्रकार के लंबित इंटेंट (एक ही ऑपरेशन, एक ही इरादा कार्रवाई, डेटा, श्रेणियां, और घटक, और एक ही झंडे) को फिर से पुनर्प्राप्त करता है, तो यह एक लंबित इंटेन्टेंट प्राप्त करेगा यदि वह अभी भी मान्य है, और कर सकता है इस प्रकार इसे हटाने के लिए रद्द करें () को कॉल करें।


एक इरादा क्या है?

एक इरादा एंड्रॉइड में एक विशिष्ट कमांड है जो आपको कुछ विशिष्ट करने के लिए एंड्रॉइड ओएस को एक कमांड भेजने की अनुमति देता है। इसके बारे में सोचें कि ऐसी कार्रवाई की जरूरत है। ऐसी कई कार्रवाइयां की जा सकती हैं जैसे ईमेल भेजना, या किसी ईमेल को फोटो संलग्न करना या एप्लिकेशन लॉन्च करना। एक इरादा बनाने का तार्किक वर्कफ़्लो आमतौर पर निम्नानुसार है: ए। इरादा बी बनाएँ। इरादा विकल्प जोड़ें -> पूर्व। हम किस प्रकार का इरादा ओएस या उस इरादे से जुड़े किसी भी विशेषताओं को भेज रहे हैं, जैसे पाठ स्ट्रिंग या इरादे सी के साथ कुछ पारित किया जा रहा है। इरादा चलाओ

वास्तविक जीवन उदाहरण: मान लीजिए कि मैं सुबह उठता हूं और वाशरूम में जाने के लिए "इंटेंन्ड" करता हूं। मुझे सबसे पहले वाशरूम में जाने के बारे में सोचना होगा, लेकिन यह वास्तव में मुझे शौचालय में नहीं ले जाता है। मुझे पहले अपने बिस्तर को पहले बिस्तर से बाहर निकलने के लिए बताना होगा, फिर वाशरूम में चले जाओ, और फिर रिलीज करें, फिर जाओ और मेरे हाथ धोएं, फिर जाओ और मेरे हाथों को मिटा दें। एक बार मुझे पता चलेगा कि मैं कहां जा रहा हूं, मैं आदेश शुरू करने के लिए भेजता हूं और मेरा शरीर कार्रवाई करता है।

लंबित इराद क्या है?

वास्तविक जीवन उदाहरण से जारी रहें, मान लीजिए कि मैं स्नान करना चाहता हूं लेकिन मैं अपने दांतों को ब्रश करने और नाश्ते खाने के बाद स्नान करना चाहता हूं। तो मुझे पता है कि मैं कम से कम 30-40 मिनट तक स्नान नहीं करूँगा। मेरे पास अभी भी मेरे सिर में है कि मुझे अपने कपड़े तैयार करने की ज़रूरत है, और फिर सीढ़ियों को बाथरूम में वापस चलाएं, फिर कपड़े पहनें और फिर स्नान करें। हालांकि यह 30-40 मिनट बीतने तक नहीं होगा। अब मेरे पास स्नान करने का एक पेंडिंग इरादा है। यह 30-40 मिनट के लिए पेंडिंग है।

लंबित इरादे और नियमित इरादे के बीच यह काफी अंतर है। लंबित इरादे के बिना नियमित इरादे बनाए जा सकते हैं, हालांकि लंबित इरादे बनाने के लिए आपको पहले एक नियमित मंशा सेटअप की आवश्यकता है।


एक भविष्य का इरादा जो अन्य ऐप्स उपयोग कर सकते हैं।
और यहां एक बनाने के लिए एक उदाहरण दिया गया है:

Intent intent = new Intent(context, MainActivity.class);
PendingIntent pendIntent = PendingIntent.getActivity(context, 0, intent, 0);

एक लंबित इंटेंट सामान्य टोकन को उस टोकन के साथ लपेटता है जिसे आप अपनी अनुमति के साथ निष्पादित करने के लिए विदेशी ऐप को देते हैं। उदाहरण के लिए:

आपके संगीत ऐप की अधिसूचना संगीत को प्ले / रोक नहीं सकती है अगर आपने ब्रॉडकास्ट भेजने के लिए PendingIntent नहीं दिया है क्योंकि आपके संगीत ऐप में READ_EXTERNAL_STORAGE अनुमति है जो अधिसूचना ऐप नहीं करता है। अधिसूचना एक सिस्टम सेवा है (इसलिए यह एक विदेशी ऐप है)।


एक लंबित इरादा एक टोकन है जिसे आप अपने ऐप की ओर से कार्रवाई करने के लिए कुछ ऐप देते हैं चाहे आपका आवेदन प्रक्रिया ज़िंदा है या नहीं।

मुझे लगता है कि दस्तावेज़ीकरण पर्याप्त रूप से विस्तृत है: PENDINGINTENT

केवल लंबित इरादों के लिए उपयोग-मामलों के बारे में सोचें (ब्रॉडकास्टिंग इरादे, शेड्यूलिंग अलार्म) और दस्तावेज़ीकरण स्पष्ट और सार्थक हो जाएगा।


मेरे मामले में, उपरोक्त उत्तरों में से कोई भी नहीं और न ही PENDINGINTENT ने मुझे PendingIntent क्लास की अवधारणा को पकड़ने में मदद की।

और फिर मुझे यह वीडियो, Google I / O 2013, ब्लू डॉट सत्र से परे मिला । इस वीडियो में, पूर्व-गूगलर जयकुमार गणेश बताते हैं कि PendingIntent क्या है, और यही बात मुझे इस बारे में बड़ी तस्वीर दे रही थी।

नीचे उपर्युक्त वीडियो का प्रतिलेखन है ( 15:24 से )।

तो लंबित इरादा क्या है?

यह एक टोकन है कि आपकी ऐप प्रक्रिया स्थान प्रक्रिया को देगी , और ब्याज की स्थिति होने पर स्थान प्रक्रिया आपके ऐप को जागृत करने के लिए इसका उपयोग करेगी । तो इसका मूल रूप से मतलब है कि पृष्ठभूमि में आपका ऐप हमेशा चलना नहीं है। जब कुछ ब्याज होता है, तो हम आपको जगाएंगे। यह बहुत सारी बैटरी बचाता है।

यह स्पष्टीकरण कोड के इस स्निपेट (जो सत्र की स्लाइड में शामिल है) के साथ और अधिक स्पष्ट हो जाता है।

PendingIntent mIntent = PendingIntent.getService(...);

mLocationClient.requestLocationUpdates(locationRequest, mIntent);

public void onHandleIntent(Intent intent) {   
    String action = intent.getAction();   
    if (ACTION_LOCATION.equals(action)) {       
        Location location = intent.getParcelableExtra(...)   
    }
}

लंबित इंटेंन्ट इरादे का एक रैपर है। लंबित इंटेंट प्राप्त करने वाला विदेशी ऐप, लंबित इंटेंट द्वारा लिपटे इरादे की सामग्री को नहीं जानता है। विदेशी ऐप का मिशन मालिकों के इरादे को वापस भेजना है जब कुछ शर्तों को पूरा किया जाता है (उदाहरण के लिए: अनुसूची के साथ अलार्म, या क्लिक के साथ अधिसूचना ...)। शर्तों को मालिक द्वारा दिया जाता है लेकिन विदेशी ऐप द्वारा संसाधित किया जाता है (उदाहरण के लिए: अलार्म, अधिसूचना)।

यदि विदेशी ऐप आपके ऐप को मंशा भेजता है, तो इसका मतलब है कि विदेशी ऐप इरादे की सामग्री के बारे में जानता है। और विदेशी ऐप इरादे भेजने का निर्णय लेता है तो आपके ऐप को कुछ शर्तों को पूरा करने के इरादे को संसाधित करना होगा, जिससे आपके ऐप को सिस्टम का प्रदर्शन संसाधन मिल सके।


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


लंबित इरादा एक इरादा है जो भविष्य में किसी बिंदु पर शुरू होगा। StartService(Intent) इरादा तुरंत शुरू होता है जब इसे StartService(Intent) या StartService(Intent)


PendingIntent मूल रूप से एक वस्तु है जो किसी अन्य उद्देश्य वस्तु को लपेटती है। फिर इसे एक विदेशी आवेदन में पारित किया जा सकता है जहां आप उस ऐप को ऑपरेशन करने का अधिकार दे रहे हैं, यानी, इस उद्देश्य को निष्पादित करें जैसे कि इसे आपके ऐप की प्रक्रिया (उसी अनुमति और पहचान) से निष्पादित किया गया हो। सुरक्षा कारणों से आपको हमेशा अंतर्निहित होने के बजाय लंबित इंटेंट को स्पष्ट इरादे पारित करना चाहिए।

 PendingIntent aPendingIntent = PendingIntent.getService(Context, 0, aIntent,
                    PendingIntent.FLAG_CANCEL_CURRENT);

टैक्सी विश्लेषण

इरादा

इरादे आमतौर पर सेवाओं को शुरू करने के लिए उपयोग किया जाता है। उदाहरण के लिए:

Intent intent = new Intent(CurrentClass.this, ServiceClass.class);
startService(intent);

यह तब होता है जब आप टैक्सी के लिए कॉल करते हैं:

Myself = CurrentClass
Taxi Driver = ServiceClass

लंबित इरादा

आपको इस तरह कुछ उपयोग करने की आवश्यकता होगी:

Intent intent = new Intent(CurrentClass.this, ServiceClass.class);
PendingIntent pi = PendingIntent.getService(parameter, parameter, intent, parameter);
getDataFromThirdParty(parameter, parameter, pi, parameter);

अब यह तीसरी पार्टी आपकी ओर से कार्यरत सेवा शुरू करेगी। वास्तविक जीवन समानता उबर या लिफ्ट है जो दोनों टैक्सी कंपनियां हैं।

आप उबर / लाइफ की सवारी के लिए अनुरोध भेजते हैं। फिर वे आगे बढ़ेंगे और आपकी ओर से अपने ड्राइवरों में से एक को कॉल करेंगे।

इसलिए:

Uber/Lyft ------ ThirdParty which receives PendingIntent
Myself --------- Class calling PendingIntent
Taxi Driver ---- ServiceClass




android-pendingintent