<रिसीवर>

सिंटैक्स:
<receiver android:directBootAware=["true" | "false"]
          android:enabled=["true" | "false"]
          android:exported=["true" | "false"]
          android:icon="drawable resource"
          android:intentMatchingFlags=["none" | "enforceIntentFilter" | "allowNullAction"]
          android:label="string resource"
          android:name="string"
          android:permission="string"
          android:process="string" >
    ...
</receiver>
इसमें शामिल:
<application>
इसमें ये एलिमेंट शामिल हो सकते हैं:
<intent-filter>
<meta-data>
<property>
विवरण:
यह ब्रॉडकास्ट रिसीवर, BroadcastReceiver सबक्लास को ऐप्लिकेशन के कॉम्पोनेंट के तौर पर दिखाता है. ब्रॉडकास्ट रिसीवर की मदद से, ऐप्लिकेशन को ऐसे इंटेंट मिल सकते हैं जिन्हें सिस्टम या अन्य ऐप्लिकेशन ब्रॉडकास्ट करते हैं. भले ही, ऐप्लिकेशन के अन्य कॉम्पोनेंट काम न कर रहे हों.

ब्रॉडकास्ट रिसीवर के बारे में सिस्टम को बताने के दो तरीके हैं. पहला तरीका यह है कि इसे इस एलिमेंट के साथ, मैनिफ़ेस्ट फ़ाइल में बताया जाए. दूसरा तरीका यह है कि कोड में डाइनैमिक तरीके से रिसीवर बनाया जाए और इसे Context.registerReceiver() तरीके या इसके ओवरलोड किए गए किसी वर्शन के साथ रजिस्टर किया जाए.

रिसीवर को डाइनैमिक तरीके से बनाने के बारे में ज़्यादा जानने के लिए, BroadcastReceiver क्लास का ब्यौरा देखें.

अगर यह रिसीवर, सिस्टम के ब्रॉडकास्ट के अलावा अन्य ब्रॉडकास्ट को भी हैंडल करता है, तो android:exported के लिए कोई वैल्यू तय करें. अगर आपको यह तय करना है कि आपका रिसीवर, अन्य ऐप्लिकेशन से ब्रॉडकास्ट रिसीव कर सकता है या नहीं, तो इसकी वैल्यू "true" पर सेट करें. वहीं, अगर आपको यह तय करना है कि आपका रिसीवर सिर्फ़ आपके ऐप्लिकेशन से ब्रॉडकास्ट रिसीव कर सकता है या नहीं, तो इसकी वैल्यू "false" पर सेट करें.

अगर आपने android:permission एट्रिब्यूट को पहले ही तय कर दिया है, तो इसे हटाने की ज़रूरत नहीं है.

चेतावनी: अपने ऐप्लिकेशन में ब्रॉडकास्ट रिसीवर की संख्या सीमित रखें. बहुत ज़्यादा ब्रॉडकास्ट रिसीवर होने से, आपके ऐप्लिकेशन की परफ़ॉर्मेंस और उपयोगकर्ताओं के डिवाइस की बैटरी लाइफ़ पर असर पड़ सकता है. बैकग्राउंड में होने वाले काम को शेड्यूल करने के लिए, BroadcastReceiver क्लास के बजाय इस्तेमाल किए जा सकने वाले एपीआई के बारे में ज़्यादा जानने के लिए, बैकग्राउंड ऑप्टिमाइज़ेशन देखें.

एट्रिब्यूट:
android:directBootAware

इससे यह पता चलता है कि ब्रॉडकास्ट रिसीवर डायरेक्ट-बूट अवेयर है या नहीं. इसका मतलब है कि यह उपयोगकर्ता के डिवाइस अनलॉक करने से पहले काम कर सकता है या नहीं.

ध्यान दें: डायरेक्ट बूट के दौरान, आपके ऐप्लिकेशन में मौजूद ब्रॉडकास्ट रिसीवर सिर्फ़ डिवाइस से सुरक्षित स्टोरेज में सेव किए गए डेटा को ऐक्सेस कर सकता है.

डिफ़ॉल्ट वैल्यू "false" होती है.

android:enabled
इससे यह पता चलता है कि सिस्टम, ब्रॉडकास्ट रिसीवर को इंस्टैंशिएट कर सकता है या नहीं. अगर सिस्टम, ब्रॉडकास्ट रिसीवर को इंस्टैंशिएट कर सकता है, तो इसकी वैल्यू "true" होती है. वहीं, अगर सिस्टम, ब्रॉडकास्ट रिसीवर को इंस्टैंशिएट नहीं कर सकता, तो इसकी वैल्यू "false" होती है. डिफ़ॉल्ट वैल्यू "true" होती है.

<application> एलिमेंट में अपना enabled एट्रिब्यूट होता है. यह ब्रॉडकास्ट रिसीवर के साथ-साथ, ऐप्लिकेशन के सभी कॉम्पोनेंट पर लागू होता है. ब्रॉडकास्ट रिसीवर को चालू करने के लिए, <application> और <receiver> दोनों एट्रिब्यूट की वैल्यू "true" होनी चाहिए. अगर इनमें से किसी की भी वैल्यू "false" है, तो ब्रॉडकास्ट रिसीवर बंद हो जाता है और इसे इंस्टैंशिएट नहीं किया जा सकता.

android:exported
इससे यह पता चलता है कि ब्रॉडकास्ट रिसीवर, अपने ऐप्लिकेशन के बाहर, सिस्टम के अलावा अन्य सोर्स से मैसेज रिसीव कर सकता है या नहीं. अगर ब्रॉडकास्ट रिसीवर, अपने ऐप्लिकेशन के बाहर, सिस्टम के अलावा अन्य सोर्स से मैसेज रिसीव कर सकता है, तो इसकी वैल्यू "true" होती है. वहीं, अगर ब्रॉडकास्ट रिसीवर, अपने ऐप्लिकेशन के बाहर, सिस्टम के अलावा अन्य सोर्स से मैसेज रिसीव नहीं कर सकता, तो इसकी वैल्यू "false" होती है. अगर इसकी वैल्यू "false" है, तो ब्रॉडकास्ट रिसीवर सिर्फ़ सिस्टम, उसी ऐप्लिकेशन के कॉम्पोनेंट या एक ही उपयोगकर्ता आईडी वाले ऐप्लिकेशन से भेजे गए मैसेज रिसीव करता है.

अगर कोई वैल्यू तय नहीं की जाती है, तो डिफ़ॉल्ट वैल्यू इस बात पर निर्भर करती है कि ब्रॉडकास्ट रिसीवर में इंटेंट फ़िल्टर शामिल हैं या नहीं. अगर रिसीवर में कम से कम एक इंटेंट फ़िल्टर शामिल है, तो डिफ़ॉल्ट वैल्यू "true" होती है. इसके अलावा, डिफ़ॉल्ट वैल्यू "false" होती है.

ब्रॉडकास्ट रिसीवर के बाहरी ऐक्सेस को सीमित करने का यह इकलौता तरीका नहीं है. इसके अलावा, अनुमति का इस्तेमाल करके, उन बाहरी इकाइयों को सीमित किया जा सकता है जो ब्रॉडकास्ट रिसीवर को मैसेज भेज सकती हैं. permission एट्रिब्यूट देखें.

android:icon
यह ब्रॉडकास्ट रिसीवर को दिखाने वाला आइकॉन है. इस एट्रिब्यूट को, ड्रॉएबल रिसॉर्स के रेफ़रंस के तौर पर सेट किया जाता है. इसमें इमेज की परिभाषा शामिल होती है. अगर इसे सेट नहीं किया जाता है, तो इसके बजाय, पूरे ऐप्लिकेशन के लिए तय किया गया आइकॉन इस्तेमाल किया जाता है. <application> एलिमेंट का icon एट्रिब्यूट देखें.

ब्रॉडकास्ट रिसीवर का आइकॉन, चाहे इसे यहां सेट किया गया हो या <application> एलिमेंट से, रिसीवर के सभी इंटेंट फ़िल्टर के लिए डिफ़ॉल्ट आइकॉन भी होता है. <intent-filter> एलिमेंट का icon एट्रिब्यूट देखें.

android:intentMatchingFlags

इस एट्रिब्यूट का इस्तेमाल करके, यह तय किया जा सकता है कि सिस्टम, आने वाले इंटेंट को ऐप्लिकेशन के कॉम्पोनेंट से कैसे मैच करता है. डिफ़ॉल्ट रूप से, मैचिंग के लिए कोई खास नियम लागू नहीं किए जाते.

<receiver> टैग पर सेट की गई वैल्यू, <application> टैग पर सेट की गई वैल्यू को बदल देती है.

वैल्यू, इनमें से एक या एक से ज़्यादा फ़्लैग होनी चाहिए. इन्हें '|' से अलग किया जाता है:

फ़्लैग ब्यौरा
none आने वाले इंटेंट के लिए, मैचिंग के सभी खास नियमों को बंद कर देता है. एक से ज़्यादा फ़्लैग तय करते समय, टकराव वाली वैल्यू को none फ़्लैग को प्राथमिकता देकर हल किया जाता है.
enforceIntentFilter

आने वाले इंटेंट के लिए, मैचिंग के सख्त नियम लागू करता है:

  • एक्सप्लिसिट इंटेंट, टारगेट कॉम्पोनेंट के इंटेंट फ़िल्टर से मैच होने चाहिए.
  • बिना किसी कार्रवाई वाले इंटेंट, किसी भी इंटेंट फ़िल्टर से मैच नहीं होते.
allowNullAction

मैचिंग के नियमों में ढील देता है, ताकि बिना किसी कार्रवाई वाले इंटेंट मैच हो सकें. इस फ़्लैग का इस्तेमाल, enforceIntentFilter के साथ मिलकर किया जाता है, ताकि यह व्यवहार हासिल किया जा सके:

  • एक्सप्लिसिट इंटेंट, टारगेट कॉम्पोनेंट के इंटेंट फ़िल्टर से मैच होने चाहिए.
  • बिना किसी कार्रवाई वाले इंटेंट, किसी भी इंटेंट फ़िल्टर से मैच हो सकते हैं.

ज़्यादा जानकारी के लिए, Android 16 (एपीआई लेवल 36) के व्यवहार में हुए बदलावों में, सुरक्षित इंटेंट सेक्शन देखें.

android:label
यह ब्रॉडकास्ट रिसीवर के लिए, उपयोगकर्ता के हिसाब से पढ़ने लायक लेबल है. अगर यह एट्रिब्यूट सेट नहीं किया जाता है, तो इसके बजाय, पूरे ऐप्लिकेशन के लिए सेट किया गया लेबल इस्तेमाल किया जाता है. <application> एलिमेंट का label एट्रिब्यूट देखें.

ब्रॉडकास्ट रिसीवर का लेबल, चाहे इसे यहां सेट किया गया हो या <application> एलिमेंट से, रिसीवर के सभी इंटेंट फ़िल्टर के लिए डिफ़ॉल्ट लेबल भी होता है. <intent-filter> एलिमेंट का label एट्रिब्यूट देखें.

लेबल को स्ट्रिंग रिसॉर्स के रेफ़रंस के तौर पर सेट किया जाता है, ताकि इसे उपयोगकर्ता इंटरफ़ेस में मौजूद अन्य स्ट्रिंग की तरह स्थानीय बनाया जा सके. हालांकि, ऐप्लिकेशन डेवलप करते समय, इसे रॉ स्ट्रिंग के तौर पर भी सेट किया जा सकता है.

android:name
यह ब्रॉडकास्ट रिसीवर को लागू करने वाली क्लास का नाम है. यह BroadcastReceiver की सबक्लास है. यह पूरी तरह क्वालिफ़ाइड क्लास का नाम है. जैसे, "com.example.project.ReportReceiver". हालांकि, शॉर्टहैंड के तौर पर, अगर नाम का पहला वर्ण पीरियड है, जैसे कि, ".ReportReceiver", तो इसे <manifest> एलिमेंट में तय किए गए पैकेज के नाम में जोड़ा जाता है.

अपने ऐप्लिकेशन को पब्लिश करने के बाद, इस नाम को तब तक न बदलें, जब तक आपने android:exported="false" सेट न किया हो.

कोई डिफ़ॉल्ट वैल्यू नहीं है. नाम तय करना ज़रूरी है.

android:permission
यह उस अनुमति का नाम है जिसकी ज़रूरत ब्रॉडकास्टर को, ब्रॉडकास्ट रिसीवर को मैसेज भेजने के लिए होती है. अगर यह एट्रिब्यूट सेट नहीं किया जाता है, तो ब्रॉडकास्ट रिसीवर पर <application> एलिमेंट के permission एट्रिब्यूट से सेट की गई अनुमति लागू होती है. अगर दोनों एट्रिब्यूट सेट नहीं किए जाते हैं, तो रिसीवर को किसी अनुमति से सुरक्षित नहीं किया जाता है.

अनुमतियों के बारे में ज़्यादा जानने के लिए, ऐप्लिकेशन मैनिफ़ेस्ट की खास जानकारी में अनुमतियां सेक्शन और सुरक्षा से जुड़े सुझावदेखें.

android:process

यह उस प्रोसेस का नाम है जिसमें ब्रॉडकास्ट रिसीवर काम करता है. आम तौर पर, किसी ऐप्लिकेशन के सभी कॉम्पोनेंट, ऐप्लिकेशन के लिए बनाई गई डिफ़ॉल्ट प्रोसेस में काम करते हैं. इसका नाम, ऐप्लिकेशन पैकेज के नाम जैसा ही होता है.

The <application> एलिमेंट का process एट्रिब्यूट, सभी कॉम्पोनेंट के लिए अलग डिफ़ॉल्ट सेट कर सकता है. हालांकि, हर कॉम्पोनेंट, अपने process एट्रिब्यूट से डिफ़ॉल्ट को बदल सकता है. इससे आपके ऐप्लिकेशन को एक से ज़्यादा प्रोसेस में फैलाया जा सकता है.

अगर इस एट्रिब्यूट को असाइन किया गया नाम, कॉलन (:) से शुरू होता है, तो ज़रूरत पड़ने पर, ऐप्लिकेशन के लिए एक नई निजी प्रोसेस बनाई जाती है. साथ ही, ब्रॉडकास्ट रिसीवर उस प्रोसेस में काम करता है.

अगर प्रोसेस का नाम, छोटे अक्षर से शुरू होता है, तो रिसीवर उस नाम की ग्लोबल प्रोसेस में काम करता है. हालांकि, इसके लिए उसके पास अनुमति होनी चाहिए. इससे अलग-अलग ऐप्लिकेशन के कॉम्पोनेंट, एक प्रोसेस शेयर कर पाते हैं. इससे रिसॉर्स का इस्तेमाल कम होता है.

पहली बार इसमें दिखाया गया:
एपीआई लेवल 1