Broadcast Receiver एक Android घटक है जो सिस्टम Broadcast संदेशों को सुनता और संसाधित करता है, जैसे नेटवर्क स्थिति में परिवर्तन, बैटरी स्तर, SMS प्राप्त करना या ऐप इंस्टॉलेशन। यह ऑपरेटिंग सिस्टम द्वारा घटना होने पर लॉन्च किया जाता है और मुख्य थ्रेड पर या पृष्ठभूमि सेवा के माध्यम से अपना कार्य करता है। Android Developer Guide, 2026 के अनुसार, Broadcast Receiver एप्लिकेशन को वैश्विक सिस्टम घटनाओं पर प्रतिक्रिया करने की अनुमति देता है भले ही वह चल न रहा हो, जो इसे Android पारिस्थितिकी तंत्र में पृष्ठभूमि घटना प्रसंस्करण के लिए एक महत्वपूर्ण तंत्र बनाता है।
मुख्य बातें
Broadcast Receiver एक Android घटक है जो ऑपरेटिंग सिस्टम या अन्य एप्लिकेशन द्वारा वितरित Intent संदेशों को प्राप्त करने और संसाधित करने के लिए डिज़ाइन किया गया है। Activity और Service के विपरीत, Broadcast Receiver का कोई उपयोगकर्ता इंटरफ़ेस नहीं है — इसका कार्य घटना होने पर एक छोटी कार्रवाई निष्पादित करना है।
Broadcast Receiver Intent तंत्र के माध्यम से काम करता है। सिस्टम या एप्लिकेशन sendBroadcast या sendOrderedBroadcast के माध्यम से Intent भेजता है, और ऑपरेटिंग सिस्टम इसे पंजीकृत रिसीवर्स तक पहुँचाता है। प्रत्येक रिसीवर onReceive विधि में Intent प्राप्त करता है, जो मुख्य थ्रेड पर निष्पादित होती है।
Android Compatibility Definition Document के अनुसार, Broadcast Receiver को onReceive को 10 सेकंड के भीतर पूरा करना होगा — अन्यथा सिस्टम इसे हैंग मानकर प्रक्रिया समाप्त कर देता है। लंबी पृष्ठभूमि कार्यों के लिए, रिसीवर से JobScheduler या WorkManager लॉन्च करें।
Android दो मुख्य प्रकार के Broadcast का समर्थन करता है: Normal Broadcast और Ordered Broadcast। अंतर वितरण क्रम और प्रसंस्करण श्रृंखला को बाधित करने की क्षमता में है। इसके अलावा, Broadcast सिस्टम (OS द्वारा उत्पन्न) और कस्टम (एप्लिकेशन द्वारा बनाए गए) में विभाजित होते हैं।
Normal Broadcast सभी पंजीकृत रिसीवर्स को अतुल्यकालिक रूप से बिना गारंटीकृत क्रम के वितरित किया जाता है। सिस्टम ऐसे Broadcast को समानांतर में संसाधित कर सकता है — प्रत्येक रिसीवर अपने थ्रेड में Intent प्राप्त करता है। Normal Broadcast पर abortBroadcast कॉल करने का कोई प्रभाव नहीं होता: अन्य रिसीवर्स को वितरण रद्द नहीं किया जा सकता।
Ordered Broadcast क्रमिक रूप से वितरित किया जाता है — प्रत्येक रिसीवर को android:priority विशेषता के अवरोही क्रम में (0 से 999 तक)। प्रसंस्करण के बाद, रिसीवर setResultExtras के माध्यम से परिणाम अगले को भेज सकता है या abortBroadcast कॉल करके श्रृंखला बाधित कर सकता है। इसका उपयोग उन परिदृश्यों में किया जाता है जहाँ प्रसंस्करण क्रम महत्वपूर्ण है — उदाहरण के लिए, SMS रिसीवर्स।
Android कई सिस्टम Broadcast उत्पन्न करता है: ACTION_BOOT_COMPLETED (डिवाइस बूट), ACTION_BATTERY_LOW, ACTION_POWER_CONNECTED, CONNECTIVITY_ACTION, ACTION_PACKAGE_ADDED और अन्य। प्रत्येक Intent में Extras में अतिरिक्त डेटा होता है — बैटरी स्तर, कनेक्शन प्रकार, पैकेज नाम।
| Broadcast प्रकार | क्रम | abortBroadcast | प्रदर्शन |
|---|---|---|---|
| Normal | गारंटीड नहीं | काम नहीं करता | उच्च (समानांतर) |
| Ordered | प्राथमिकता के अनुसार | काम करता है | मध्यम (क्रमिक) |
| Sticky | एकल मान | लागू नहीं | निम्न (API 21 से अप्रचलित) |
Sticky Broadcast एक अप्रचलित प्रकार है जो अंतिम भेजे गए मान को रखता था। इसके बजाय, नवीनतम स्थिति संग्रहीत करने के लिए LiveData, StateFlow या साझा SharedPreferences का उपयोग करें।
Broadcast Receiver को दो तरीकों से पंजीकृत किया जा सकता है: स्थिर रूप से AndroidManifest.xml के माध्यम से या गतिशील रूप से कोड में registerReceiver के माध्यम से। चुनाव परिदृश्य पर निर्भर करता है: स्थिर पंजीकरण तब भी काम करता है जब एप्लिकेशन नहीं चल रहा हो, गतिशील पंजीकरण केवल तब काम करता है जब पंजीकरण करने वाला घटक सक्रिय हो।
स्थिर पंजीकरण मेनिफेस्ट में <receiver> टैग के साथ <application> के अंदर घोषित किया जाता है। प्रत्येक रिसीवर के लिए, हैंडलर क्लास और इंटरसेप्ट करने के लिए क्रियाओं वाला Intent फ़िल्टर निर्दिष्ट किया जाता है। सिस्टम ऐसे रिसीवर्स को Broadcast होने पर लोड करता है भले ही एप्लिकेशन नहीं चल रहा हो।
<!-- Static Broadcast Receiver registration in manifest -->
<receiver android:name=".BootReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
गतिशील पंजीकरण Activity, Service या Fragment कोड में registerReceiver विधि का उपयोग करके किया जाता है। रिसीवर केवल तब तक जीवित रहता है जब तक उसे पंजीकृत करने वाला घटक जीवित है। onPause या onDestroy में हमेशा unregisterReceiver कॉल करें — अन्यथा मेमोरी लीक होती है और सिस्टम प्रक्रिया समाप्त कर सकता है।
Ordered Broadcast के लिए, वितरण क्रम android:priority विशेषता द्वारा निर्धारित किया जाता है। उच्च प्राथमिकता वाला रिसीवर पहले Intent प्राप्त करता है। यदि वह प्रसंस्करण के बाद abortBroadcast कॉल करता है, तो कम प्राथमिकता वाले रिसीवर्स को Intent प्राप्त नहीं होगा। स्थिर रिसीवर्स के लिए, प्राथमिकता मेनिफेस्ट के Intent फ़िल्टर में सेट की जाती है।
Ordered Broadcast में रिसीवर्स setResultExtras या setResultData के माध्यम से श्रृंखला में अगले को डेटा भेज सकते हैं। यह पाइपलाइन प्रसंस्करण की अनुमति देता है: पहला रिसीवर Intent को अतिरिक्त डेटा से समृद्ध करता है, दूसरा इसका उपयोग करता है, तीसरा श्रृंखला पूरी करता है। getResultExtras विधि पिछले रिसीवर द्वारा भेजे गए डेटा को पढ़ती है।
Normal Broadcast के लिए, क्रम गारंटीड नहीं है, इसलिए सभी रिसीवर्स को बिना बदलाव के मूल Intent मिलता है। यदि आपको चाहिए कि रिसीवर्स एक दूसरे को प्रभावित करें, तो sendBroadcast के बजाय sendOrderedBroadcast का उपयोग करें।
Android 8 (API 26, Oreo) ने पृष्ठभूमि Broadcast पर महत्वपूर्ण प्रतिबंध लागू किए। अधिकांश अंतर्निहित Broadcast — जो किसी विशिष्ट एप्लिकेशन को संबोधित नहीं हैं — स्थिर पंजीकरण के साथ काम नहीं करते। सिस्टम CONNECTIVITY_ACTION या ACTION_BATTERY_LOW जैसी क्रियाओं के लिए मेनिफेस्ट में पंजीकृत रिसीवर्स को ब्लॉक करता है।
Google ने उन Broadcast की सूची तय की है जो स्थिर पंजीकरण के साथ काम करना जारी रखते हैं: BOOT_COMPLETED, TIME_TICK, Alarm और पैकेज परिवर्तन — कुल मिलाकर लगभग एक दर्जन अपवाद। अन्य सभी अंतर्निहित Broadcast को अब Context.registerReceiver के माध्यम से गतिशील पंजीकरण की आवश्यकता है, जो केवल तब काम करता है जब ऐप अग्रभूमि में हो।
पृष्ठभूमि कार्यों के लिए जो पहले Broadcast Receiver के माध्यम से संभाले जाते थे, Android WorkManager (निष्पादन गारंटी के साथ विलंबित कार्य), JobScheduler (डिवाइस स्थिति पर विचार करने वाले आवधिक कार्य) और NotificationListenerService (अधिसूचना निगरानी) की सिफारिश करता है। ये घटक Android 8 प्रतिबंधों के बिना काम करते हैं और ऊर्जा खपत के लिए अनुकूलित हैं।
आइए नेटवर्क कनेक्टिविटी ट्रैक करने के लिए एक Broadcast Receiver बनाएँ। रिसीवर CONNECTIVITY_ACTION Broadcast कैप्चर करेगा और कनेक्शन प्रकार लॉग करेगा। Android 8+ के लिए, हम इसे गतिशील रूप से पंजीकृत करेंगे क्योंकि यह एक अंतर्निहित Broadcast है जो स्थिर पंजीकरण से बाहर है।
// नेटवर्क स्थिति ट्रैकिंग के लिए Broadcast Receiver
class NetworkReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val network = cm.activeNetwork
val caps = cm.getNetworkCapabilities(network)
val connectionType = when {
caps?.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) == true -> "WiFi"
caps?.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) == true -> "Cellular"
else -> "Disconnected"
}
Log.d("NetworkReceiver", "कनेक्शन प्रकार: $connectionType")
}
}
// Activity में गतिशील पंजीकरण
class MainActivity : AppCompatActivity() {
private val networkReceiver = NetworkReceiver()
override fun onStart() {
super.onStart()
val filter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)
registerReceiver(networkReceiver, filter)
}
override fun onStop() {
super.onStop()
unregisterReceiver(networkReceiver)
}
}
हमेशा onStop में रिसीवर का पंजीकरण रद्द करें — यदि Activity पृष्ठभूमि में चली जाती है लेकिन रिसीवर पंजीकृत रहता है, तो सिस्टम संसाधन मुक्त नहीं कर सकता। Service के लिए, onDestroy का उपयोग करें। फ़्रैगमेंट में, फ़्रैगमेंट जीवनचक्र का पालन करते हुए, onStart में रिसीवर पंजीकृत करें और onStop में पंजीकरण रद्द करें।
अक्सर पूछे जाने वाले प्रश्न
Broadcast Receiver सिस्टम और कस्टम Broadcast संदेशों के प्रसंस्करण के लिए एक Android घटक है। यह onReceive विधि में Intent प्राप्त करता है, जो मुख्य थ्रेड पर चलता है, और 10 सेकंड के भीतर पूरा होना चाहिए। लंबे कार्यों के लिए, WorkManager या JobScheduler का उपयोग करें।
Normal Broadcast सभी रिसीवर्स को अतुल्यकालिक और समानांतर रूप से वितरित किया जाता है — क्रम गारंटीड नहीं है, abortBroadcast काम नहीं करता। Ordered Broadcast प्राथमिकता के अनुसार क्रमिक रूप से वितरित किया जाता है, प्रत्येक रिसीवर श्रृंखला बाधित कर सकता है या setResultExtras के माध्यम से अगले को डेटा भेज सकता है।
स्थिर पंजीकरण (मेनिफेस्ट में) रिसीवर को तब भी काम करने की अनुमति देता है जब एप्लिकेशन नहीं चल रहा हो। गतिशील पंजीकरण (registerReceiver के माध्यम से) केवल तब काम करता है जब पंजीकरण करने वाला घटक सक्रिय हो। Android 8 से शुरू करके, कई अंतर्निहित Broadcast को गतिशील पंजीकरण की आवश्यकता होती है।
Android 8 (API 26) ने अधिकांश अंतर्निहित Broadcast के लिए स्थिर पंजीकरण प्रतिबंधित कर दिया, जैसे CONNECTIVITY_ACTION या ACTION_BATTERY_LOW। अपवादों में BOOT_COMPLETED, Alarm, समय और कुछ अन्य शामिल हैं। पृष्ठभूमि कार्यों के लिए, Broadcast के बजाय WorkManager का उपयोग करें।
onReceive से UI में डेटा भेजने के लिए LiveData, StateFlow, EventBus या LocalBroadcastManager का उपयोग करें। onReceive से सीधे UI अपडेट करने का प्रयास न करें — यह मुख्य थ्रेड पर चलता है, लेकिन रिसीवर गारंटी नहीं देता कि Activity दृश्यमान है। LocalBroadcastManager आंतरिक संचार के लिए एक अप्रचलित विकल्प है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें