जवाबों:
A PendingIntent
एक टोकन है जिसे आप एक विदेशी एप्लिकेशन (जैसे NotificationManager
, AlarmManager
होम स्क्रीन AppWidgetManager
, या अन्य 3 पार्टी एप्लिकेशन) को देते हैं, जो विदेशी एप्लिकेशन को कोड के पूर्वनिर्धारित टुकड़े को निष्पादित करने के लिए आपके एप्लिकेशन की अनुमतियों का उपयोग करने की अनुमति देता है ।
यदि आप विदेशी एप्लिकेशन को एक इंटेंट देते हैं, तो यह आपकी Intent
अपनी अनुमतियों के साथ निष्पादित करेगा । लेकिन यदि आप विदेशी आवेदन को देते हैं PendingIntent
, तो वह आवेदन Intent
आपके आवेदन की अनुमति का उपयोग करके निष्पादित करेगा ।
एक लंबित इरादे एक टोकन है जिसे आप अपने एप्लिकेशन की ओर से कार्रवाई करने के लिए कुछ एप्लिकेशन को देते हैं, भले ही आपकी आवेदन प्रक्रिया जीवित हो या नहीं।
मुझे लगता है कि प्रलेखन पर्याप्त रूप से विस्तृत है: लंबित इरादे डॉक्स ।
पेंडिंग इन्टेंस जैसे (ब्रॉडकास्टिंग इंटेंट्स, शेड्यूलिंग अलार्म) के लिए उपयोग के मामलों के बारे में सोचें और प्रलेखन स्पष्ट और सार्थक हो जाएगा।
मेरे मामले में, उपरोक्त उत्तरों में से किसी ने भी और न ही Google के आधिकारिक दस्तावेज ने मुझे 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(...)
}
}
PendingIntent की आवश्यकता क्यों है? मैं जैसा सोच रहा था
Intent
याIntent
ही उद्देश्य के लिए एक सरल का उपयोग क्यों नहीं कर सकते हैं ।उदाहरण के लिएIntent bluetoothIntent= new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
अगर मैं bluetoothIntent
किसी अन्य एप्लिकेशन को भेजता हूं , जिसकी अनुमति नहीं है android.permission.BLUETOOTH_ADMIN
, तो उस एप्लिकेशन को प्राप्त करने से ब्लूटूथ सक्षम नहीं हो सकता है startActivity(bluetoothIntent)
।
उपयोग करने से सीमा समाप्त हो जाती है PendingIntent
। साथ PendingIntent
प्राप्त आवेदन, की आवश्यकता नहीं android.permission.BLUETOOTH_ADMIN
ब्लूटूथ सक्षम करने के लिए। स्रोत ।
एक भविष्य का इरादा जो अन्य एप्लिकेशन का उपयोग कर सकते हैं।
और यहाँ एक बनाने के लिए एक उदाहरण है:
Intent intent = new Intent(context, MainActivity.class);
PendingIntent pendIntent = PendingIntent.getActivity(context, 0, intent, 0);
टेक्सी एनालाजी
इरादा
आम तौर पर सेवाओं को शुरू करने के लिए उपयोग किया जाता है। उदाहरण के लिए:
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 है जो दोनों टैक्सी कंपनियां हैं।
आप उबर / Lyft के लिए एक सवारी के लिए एक अनुरोध भेजें। वे तब आगे बढ़ेंगे और अपनी ओर से अपने एक ड्राइवर को बुलाएंगे।
इसलिए:
Uber/Lyft ------ ThirdParty which receives PendingIntent
Myself --------- Class calling PendingIntent
Taxi Driver ---- ServiceClass
एक PendingIntent एक टोकन है जिसे आप किसी अन्य एप्लिकेशन (जैसे अधिसूचना प्रबंधक, अलार्म प्रबंधक या अन्य 3 पार्टी एप्लिकेशन) को देते हैं, जो इस अन्य एप्लिकेशन को कोड के पूर्वनिर्धारित टुकड़े को निष्पादित करने के लिए आपके आवेदन की अनुमति का उपयोग करने की अनुमति देता है। एक लंबित इरादे के माध्यम से प्रसारण करने के लिए ताकि PendingIntent.getBroadcast () के माध्यम से एक लंबित हो। एक लंबित इरादे के माध्यम से एक गतिविधि करने के लिए आप PendingIntent.getActivity () के माध्यम से गतिविधि प्राप्त करते हैं।
आशय क्या है?
एक आशय एंड्रॉइड में एक विशिष्ट कमांड है जो आपको कुछ विशिष्ट करने के लिए एंड्रॉइड ओएस पर एक कमांड भेजने की अनुमति देता है। इसे एक कार्रवाई की तरह समझें, जिस पर अमल करने की जरूरत है। ऐसे कई कार्य हैं जो एक ईमेल भेजना, या एक ईमेल में एक तस्वीर संलग्न करना या यहां तक कि एप्लिकेशन लॉन्च करना भी हो सकते हैं। एक इरादा बनाने का तार्किक वर्कफ़्लो आमतौर पर इस प्रकार है: ए। इंटेंट बी बनाएं। इरादा विकल्प जोड़ें -> पूर्व। हम किस प्रकार के इरादे से ओएस को भेज रहे हैं या उस इरादे से जुड़ी कोई विशेषता, जैसे कि टेक्स्ट स्ट्रिंग या आशय के साथ कुछ पारित किया जा रहा है। इरादे से भागो
वास्तविक जीवन उदाहरण: मान लीजिए कि मैं सुबह उठता हूं और मैं वॉशरूम जाने के लिए "इरादा" करता हूं। मुझे पहले वाशरूम जाने के बारे में सोचना होगा, लेकिन यह कि वास्तव में मुझे वाशरूम तक नहीं जाना है। फिर मुझे अपने मस्तिष्क को पहले बिस्तर से बाहर निकलने के लिए कहना होगा, फिर वॉशरूम में चलना होगा, और फिर जारी करना होगा, फिर जाकर अपने हाथों को धोना होगा, फिर जाकर मेरे हाथों को पोंछना होगा। एक बार जब मुझे पता चल जाता है कि मैं कहाँ जा रहा हूँ तो मुझे शुरू करने की आज्ञा है और मेरा शरीर कार्रवाई करता है।
लंबित इरादे क्या है?
वास्तविक जीवन उदाहरण से जारी रखते हुए, मान लीजिए कि मैं स्नान करना चाहता हूं लेकिन मैं चाहता हूं कि मैं अपने दांतों को ब्रश करूं और नाश्ता करूं। इसलिए मुझे पता है कि मैं कम से कम 30-40 मिनट तक बारिश नहीं करूंगा। मेरे पास अभी भी मेरे सिर में है कि मुझे अपने कपड़े तैयार करने की आवश्यकता है, और फिर सीढ़ियों से बाथरूम में वापस चलें, फिर कपड़े उतारें और फिर स्नान करें। हालाँकि ऐसा तब तक नहीं होगा जब तक कि 30-40 मिनट नहीं बीत जाते। अब मुझे स्नान करने का इरादा है। यह 30-40 मिनट के लिए भुगतान कर रहा है।
यह एक लंबित इरादे और एक नियमित इरादे के बीच का अंतर है। रेगुलर इंटेंट्स को बिना किसी पेंडिंग इन्टेंट के बनाया जा सकता है, हालाँकि एक पेंडिंग इन्टेंट बनाने के लिए आपको पहले एक रेगुलर इंटेंट सेटअप करना होगा।
PendingIntent
मूल रूप से एक वस्तु है जो दूसरी Intent
वस्तु को लपेटती है। फिर इसे एक विदेशी एप्लिकेशन को पास किया जा सकता है, जहां आप उस ऐप को ऑपरेशन करने का अधिकार प्रदान कर रहे हैं, अर्थात, इरादे को निष्पादित करें जैसे कि यह आपके अपने ऐप की प्रक्रिया (उसी अनुमति और पहचान) से निष्पादित किया गया हो। सुरक्षा कारणों से आपको हमेशा अंतर्निहित होने के बजाय एक लंबित इरादे को पास करना चाहिए।
PendingIntent aPendingIntent = PendingIntent.getService(Context, 0, aIntent,
PendingIntent.FLAG_CANCEL_CURRENT);
एक आसान भाषा में,
1. प्रदर्शन करने के लिए एक इरादे और लक्ष्य कार्रवाई का विवरण। पहले आपको एक इरादा बनाना होगा और फिर आपको एक विशिष्ट जावा वर्ग पास करना होगा जिसे आप इरादे में करना चाहते हैं।
2. आप उन java class को कॉल कर सकते हैं जो PendingIntent.getActivity, PendingIntent.getActivities (Context, int, Intent [], int], PendingIntent.getBroadcast (Context, int, Intent, int), और PendingIntent द्वारा आपकी क्लास एक्शन क्लास है। getService (संदर्भ, इंट, इंटेंट, इंट); यहाँ आप यह देखते हैं कि Intent जो चरण 1 से आता है।
3. आपको यह ध्यान रखना चाहिए कि ... किसी अन्य एप्लिकेशन को PendingIntent देकर, आप इसे आपके द्वारा निर्दिष्ट ऑपरेशन को करने का अधिकार प्रदान कर रहे हैं।
यही मैंने लंबे समय तक पढ़ने के बाद सीखा।
एक PendingIntent एक सामान्य टोकन को एक टोकन के साथ लपेटता है जिसे आप अपनी अनुमति के साथ निष्पादित करने के लिए विदेशी एप्लिकेशन को देते हैं। उदाहरण के लिए:
यदि आपने संगीत
PendingIntent
भेजने कीREAD_EXTERNAL_STORAGE
अनुमति नहीं दी है, तो आपके संगीत ऐप की सूचना संगीत को चला / रोक नहीं सकती है क्योंकि आपके संगीत ऐप की अनुमति है जो अधिसूचना ऐप नहीं देती है। अधिसूचना एक सिस्टम सेवा है (इसलिए यह एक विदेशी ऐप है)।
जैसा कि इसके नाम से पता चलता है .. PendingIntent
आप इसे (कुछ समय बाद कर सकते हैं) झुक सकते हैं। यह दूसरे इरादे के रूप में काम करता है .. यह आपकी ओर से प्रदर्शन करने के लिए अपने काम को किसी अन्य ऐप को देने का एक तरीका है।
एक लंबित आशय भविष्य में एक कार्रवाई को निर्दिष्ट करता है। यह आपको किसी अन्य एप्लिकेशन के लिए एक भविष्य के इरादे को पारित करने देता है और उस एप्लिकेशन को उस इरादे को निष्पादित करने की अनुमति देता है जैसे कि आपके आवेदन के समान अनुमतियाँ थीं, चाहे आपका आवेदन अभी भी आस-पास है या नहीं जब इंटेंट अंततः लागू किया गया हो।
यह एक टोकन है जो आप एक विदेशी एप्लिकेशन को देते हैं जो विदेशी एप्लिकेशन को आपके पूर्वनिर्धारित टुकड़े को निष्पादित करने के लिए आपके आवेदन की अनुमति का उपयोग करने की अनुमति देता है।
यदि आप विदेशी एप्लिकेशन को एक इंटेंट देते हैं, और वह एप्लिकेशन आपके द्वारा दिए गए इरादे को भेजता / प्रसारित करता है, तो वे अपनी स्वयं की अनुमति के साथ इरादे को निष्पादित करेंगे। लेकिन अगर आप इसके बजाय विदेशी एप्लिकेशन को एक लंबित इरादे देते हैं जिसे आपने अपनी अनुमति से बनाया है, तो वह एप्लिकेशन आपके आवेदन की अनुमति का उपयोग करते हुए निहित इरादे को निष्पादित करेगा।
एक लंबित इरादे के माध्यम से प्रसारण करने के लिए ताकि PendingIntent.getBroadcast () के माध्यम से एक लंबित हो। एक लंबित इरादे के माध्यम से एक गतिविधि करने के लिए आप PendingIntent.getActivity () के माध्यम से गतिविधि प्राप्त करते हैं।
यह एक इरादे की कार्रवाई है जिसे आप प्रदर्शन करना चाहते हैं, लेकिन बाद में। बर्फ पर एक आशय डाल एक के बारे में सोचो। इसका कारण यह है क्योंकि एक इरादे को आपके आवेदन में एक वैध संदर्भ से बनाया और लॉन्च किया जाना चाहिए, लेकिन कुछ मामले ऐसे हैं जहां कोई उस समय उपलब्ध नहीं है जब आप कार्रवाई चलाना चाहते हैं क्योंकि आप तकनीकी रूप से आवेदन के संदर्भ से बाहर हैं ( दो सामान्य उदाहरण एक अधिसूचना या एक ब्रॉडकास्टर से एक गतिविधि शुरू कर रहे हैं।
एक PendingIntent बनाकर, जिसे आप लॉन्च करने के लिए उपयोग करना चाहते हैं, कहते हैं, जब आपके पास ऐसा करने के लिए एक गतिविधि हो (किसी अन्य गतिविधि या सेवा के अंदर) तो आप उस वस्तु को किसी बाहरी चीज़ के लिए पास कर सकते हैं ताकि वह आपके एप्लिकेशन का हिस्सा लॉन्च कर सके। आपकी जगह।
एक PendingIntent अपनी प्रक्रिया से बाहर निकलने के बाद भी काम करने के लिए अनुप्रयोगों के लिए एक साधन प्रदान करता है। यह ध्यान रखना महत्वपूर्ण है कि PendingIntent बनाने वाले एप्लिकेशन के मारे जाने के बाद भी, यह Intent अभी भी चल सकता है। एक इरादे का वर्णन और इसके साथ प्रदर्शन करने के लिए लक्ष्य कार्रवाई। इस वर्ग के उदाहरण getActivity (Context, int, Intent, int), getBroadcast (Context, int, Intent, int), getService (Context, int, Intent, int) के साथ बनाए जाते हैं; लौटी हुई वस्तु को अन्य अनुप्रयोगों को सौंपा जा सकता है ताकि वे बाद में आपके द्वारा बताई गई क्रिया को कर सकें।
किसी अन्य एप्लिकेशन को एक PendingIntent देकर, आप इसे उस ऑपरेशन को करने का अधिकार दे रहे हैं जिसे आपने निर्दिष्ट किया है जैसे कि अन्य एप्लिकेशन स्वयं (उसी अनुमतियों और पहचान के साथ) था। इस प्रकार, आपको सावधान रहना चाहिए कि आप कैसे लंबित निर्माण करते हैं: अक्सर, उदाहरण के लिए, आपके द्वारा आपूर्ति की जाने वाली आधार आशय का घटक नाम स्पष्ट रूप से आपके स्वयं के घटकों में से एक में सेट होगा, यह सुनिश्चित करने के लिए कि यह अंततः वहां भेजा गया है और कहीं नहीं है।
एक PendingIntent केवल सिस्टम द्वारा बनाए गए एक टोकन का संदर्भ है जो इसे पुनर्प्राप्त करने के लिए उपयोग किए गए मूल डेटा का वर्णन करता है। इसका मतलब यह है कि, भले ही इसके स्वयं के अनुप्रयोग की प्रक्रिया को मार दिया गया हो, लेकिन लंबित स्वयं ही अन्य प्रक्रियाओं से प्रयोग करने योग्य रहेगा जिन्हें इसे दिया गया है। यदि बनाने वाला एप्लिकेशन बाद में एक ही तरह के PendingIntent (एक ही ऑपरेशन, एक ही इरादे की कार्रवाई, डेटा, श्रेणियों और एक ही झंडे) को पुनः प्राप्त करता है, तो यह एक PendingIntent को उसी टोकन का प्रतिनिधित्व करेगा, जो अभी भी मान्य है, और कर सकता है इस प्रकार इसे रद्द करने () को हटाने के लिए कॉल करें।