Computer >> कंप्यूटर >  >> प्रणाली >> Android

शुरुआती के लिए प्रसारण रिसीवर

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

पृष्ठभूमि

ब्रॉडकास्ट रिसीवर आपके एंड्रॉइड एप्लिकेशन के घटक हैं जो विभिन्न आउटलेट्स से प्रसारण संदेशों (या घटनाओं) को सुनते हैं:

  • अन्य एप्लिकेशन से
  • सिस्टम से ही
  • आपके आवेदन से

मतलब, कि उन्हें तब बुलाया जाता है जब एक निश्चित कार्रवाई हुई हो जिसे सुनने के लिए प्रोग्राम किया गया हो (आई.ई., एक प्रसारण)।

एक प्रसारण केवल एक आशय वस्तु के अंदर लिपटे एक संदेश है। एक प्रसारण या तो निहित या स्पष्ट हो सकता है।

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

रिसीवर घोषित करने के दो तरीके हैं:

  1. अपनी AndroidManifest.xml फ़ाइल में टैग (जिसे स्थैतिक भी कहा जाता है) के साथ घोषित करके
<receiver android:name=".YourBrodcastReceiverClass"  android:exported="true">
    <intent-filter>
        <!-- The actions you wish to listen to, below is an example -->
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>
AndroidManifest.xml

आप देखेंगे कि ऊपर घोषित प्रसारण रिसीवर के पास exported="true" की संपत्ति है . यह विशेषता रिसीवर को बताती है कि वह एप्लिकेशन के दायरे से बाहर के प्रसारण प्राप्त कर सकता है।

2. या गतिशील रूप से रजिस्टर रिसीवर के साथ एक उदाहरण दर्ज करके (जिसे संदर्भ पंजीकृत के रूप में जाना जाता है)

public abstract Intent registerReceiver (BroadcastReceiver receiver, 
                IntentFilter filter);

कार्यान्वयन

अपना स्वयं का प्रसारण रिसीवर बनाने के लिए, आपको पहले BroadcastReceiver मूल वर्ग का विस्तार करना होगा और अनिवार्य विधि को ओवरराइड करना होगा, onReceive:

public void onReceive(Context context, Intent intent) {
    //Implement your logic here
 }

इन सबको एक साथ रखने से पैदावार होती है:

public class MyBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        StringBuilder sb = new StringBuilder();
        sb.append("Action: " + intent.getAction() + "\n");
        sb.append("URI: " + intent.toUri(Intent.URI_INTENT_SCHEME).toString() + "\n");
        String log = sb.toString();
        Toast.makeText(context, log, Toast.LENGTH_LONG).show();

    }
}
MyBroadcastReceiver.java
⚠️ onReceive विधि मुख्य थ्रेड पर चलती है, और इस वजह से, इसका निष्पादन संक्षिप्त होना चाहिए।

यदि एक लंबी प्रक्रिया निष्पादित की जाती है, तो सिस्टम वापस आने के बाद प्रक्रिया को मार सकता है। इससे बचने के लिए, goAsync का उपयोग करने या किसी कार्य को शेड्यूल करने पर विचार करें। आप इस लेख के नीचे नौकरी शेड्यूल करने के बारे में अधिक पढ़ सकते हैं।

गतिशील पंजीकरण उदाहरण

एक संदर्भ के साथ एक रिसीवर को पंजीकृत करने के लिए, आपको सबसे पहले अपने प्रसारण रिसीवर के एक उदाहरण को तुरंत चालू करना होगा:

BroadcastReceiver myBroadcastReceiver = new MyBroadcastReceiver();

फिर, आप अपनी इच्छानुसार विशिष्ट संदर्भ के आधार पर इसे पंजीकृत कर सकते हैं:

IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
this.registerReceiver(myBroadcastReceiver, filter);
IntentFilter के लिए पहला पैरामीटर एक स्ट्रिंग है जो एक क्रिया का प्रतिनिधित्व करता है

जब आपको इसकी आवश्यकता न हो तो अपने प्रसारण रिसीवर को अपंजीकृत करना न भूलें

@Override
protected void onStop() {
  super.onStop();
  unregisterReceiver(myBroadcastReceiver);
}

एक ईवेंट का प्रसारण करना

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

प्रसारण भेजने के तीन तरीके हैं:

  1. sendOrderedBroadcast विधि, एक समय में केवल एक रिसीवर को प्रसारण भेजना सुनिश्चित करती है। प्रत्येक प्रसारण बदले में, इसके बाद वाले को डेटा पास कर सकता है, या प्रसारण के प्रसारण को प्राप्त करने वाले रिसीवर को रोक सकता है
  2. भेजें प्रसारण ऊपर वर्णित विधि के समान है, एक अंतर के साथ। सभी प्रसारण प्राप्तकर्ता संदेश प्राप्त करते हैं और एक दूसरे पर निर्भर नहीं होते हैं
  3. LocalBroadcastManager.sendBroadcast विधि केवल आपके आवेदन के अंदर परिभाषित रिसीवरों को प्रसारण भेजती है और आपके आवेदन के दायरे से अधिक नहीं होती है। एक कस्टम प्रसारण भेजने का उदाहरण

https://giphy.com/gifs/23gUJhHyWkXEwl7UYV/html5

शुरुआती के लिए प्रसारण रिसीवर
अनस्प्लैश पर जॉन गिबन्स द्वारा फोटो

गोचर्स और ध्यान देने योग्य बातें

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

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

  • 7.0 और ऊपर (API स्तर 24) - दो सिस्टम प्रसारण अक्षम कर दिए गए हैं, एक्शन_न्यू_पिक्चर और एक्शन_न्यू_वीडियो (लेकिन उन्हें पंजीकृत रिसीवर के लिए एंड्रॉइड ओ में वापस लाया गया था)
  • 8.0 और ऊपर (API स्तर 26) - अधिकांश निहित प्रसारणों को गतिशील रूप से पंजीकृत करने की आवश्यकता है न कि स्थिर रूप से (आपके मेनिफेस्ट में)। आप उन प्रसारणों को देख सकते हैं जिन्हें इस लिंक में श्वेतसूचीबद्ध किया गया था।
  • 9.0 और ऊपर (API स्तर 28) - वाई-फाई सिस्टम प्रसारण और Network_State_Changed_Action पर कम जानकारी प्राप्त हुई।

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

प्रसारण प्राप्तकर्ताओं के विकल्प

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

  • स्थानीय प्रसारण प्रबंधक - जैसा कि मैंने ऊपर उल्लेख किया है, यह केवल आपके आवेदन के भीतर प्रसारण के लिए मान्य है
  • नौकरी का समय निर्धारित करना - प्राप्त सिग्नल या ट्रिगर के आधार पर कार्य चलाया जा सकता है, इसलिए आप पा सकते हैं कि जिस प्रसारण पर आप सुन रहे थे उसे नौकरी से बदला जा सकता है। इसके अलावा, जॉब शेड्यूलर, गारंटी देगा कि आपका काम खत्म हो जाएगा, लेकिन यह निर्धारित करने के लिए कि इसे कब चलना चाहिए, यह विभिन्न सिस्टम कारकों (समय और शर्तों) को ध्यान में रखेगा। नौकरी बनाते समय, आप ऑनस्टार्टजॉब . नामक एक विधि को ओवरराइड कर देंगे . यह विधि मुख्य धागे पर चलती है, इसलिए सुनिश्चित करें कि यह अपना काम सीमित समय में पूरा करे। यदि आपको जटिल तर्क करने की आवश्यकता है, तो पृष्ठभूमि कार्य शुरू करने पर विचार करें। इसके अलावा, इस पद्धति के लिए वापसी मूल्य एक बूलियन है, जहां सत्य यह दर्शाता है कि कुछ क्रियाएं अभी भी की जा रही हैं, और गलत का अर्थ है कि काम पूरा हो गया है

यदि आप पहली बार उस आनंद और आश्चर्य का अनुभव करना चाहते हैं जो प्रसारण रिसीवर हैं, तो आप मेरे द्वारा स्थापित रिपॉजिटरी के इन लिंक का अनुसरण कर सकते हैं:

  1. कस्टम प्रसारण (प्रकट घोषणा के साथ)
  2. प्रसारण का पंजीकरण (मैनिफेस्ट में एक घोषित किए बिना)
  3. स्थानीय प्रसारण प्रबंधक

प्रसारण खत्म।


  1. शुरुआती के लिए माइक्रोसॉफ्ट एक्सेल ट्यूटोरियल

    यदि आप Microsoft Excel . की मूल बातें सीखने और समझने के लिए उत्सुक हैं , तो यह ट्यूटोरियल उन सभी विशेषताओं के माध्यम से शुरुआती लोगों का मार्गदर्शन करेगा जिन्हें आपको जानना आवश्यक है। एक्सेल कई उद्योगों द्वारा व्यावसायिक योजनाओं को तैयार करने, वित्तीय रिपोर्ट बनाने, बजट रिपोर्ट तैयार करने आदि के लिए

  1. शुरुआती के लिए Microsoft PowerPoint ट्यूटोरियल

    शुरुआती लोगों के लिए यह Microsoft PowerPoint ट्यूटोरियल आपको इसे शुरू करने और बनाने का तरीका सीखने में मदद करेगा। यह पोस्ट आपको अपनी प्रस्तुति को आकर्षक और प्रस्तुत करने योग्य बनाने के लिए चरण-दर-चरण विवरण और सुझाव देगा। पावरपॉइंट की सभी मूल बातें, जैसे कि नई स्लाइड, एक हेडर और एक पाद लेख जोड़ना, थी

  1. 10 शुरुआती के लिए मैकबुक प्रो टिप्स

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