ब्रॉडकास्ट की खास जानकारी

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

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

खास ब्रॉडकास्ट पाने के लिए, ऐप्लिकेशन रजिस्टर कर सकते हैं. जब कोई ब्रॉडकास्ट भेजा जाता है, सिस्टम, ब्रॉडकास्ट मैसेज उन ऐप्लिकेशन पर अपने-आप भेज देता है जिन्होंने सदस्यता ली है उन्हें इस तरह का ब्रॉडकास्ट करना चाहिए.

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

सिस्टम ब्रॉडकास्ट के बारे में जानकारी

अलग-अलग सिस्टम इवेंट के होने पर, सिस्टम अपने-आप ब्रॉडकास्ट भेजता है, जैसे, जब सिस्टम हवाई जहाज़ मोड को चालू और बंद करता है. प्रणाली ब्रॉडकास्ट मैसेज उन सभी ऐप्लिकेशन को भेजे जाते हैं जिन्होंने इवेंट.

ब्रॉडकास्ट मैसेज Intent में रैप होता है वह ऑब्जेक्ट जिसकी कार्रवाई स्ट्रिंग होने वाले इवेंट की पहचान करती है (उदाहरण के लिए android.intent.action.AIRPLANE_MODE). इंटेंट में यह भी शामिल हो सकता है इसके अतिरिक्त फ़ील्ड में शामिल अतिरिक्त जानकारी. उदाहरण के लिए, हवाई जहाज़ मोड इंटेंट में बूलियन एक्स्ट्रा शामिल है, जो बताता है कि हवाई जहाज़ है या नहीं मोड चालू है.

इंटेंट पढ़ने और कार्रवाई स्ट्रिंग पाने के तरीके के बारे में ज़्यादा जानकारी इंटेंट, इंटेंट और इंटेंट देखें फ़िल्टर.

सिस्टम ब्रॉडकास्ट की कार्रवाइयों की पूरी सूची देखने के लिए, यह देखें BROADCAST_ACTIONS.TXT फ़ाइल है. हर ब्रॉडकास्ट ऐक्शन में इससे संबद्ध स्थिर फ़ील्ड है. उदाहरण के लिए, नियतांक का मान ACTION_AIRPLANE_MODE_CHANGED है android.intent.action.AIRPLANE_MODE. हर ब्रॉडकास्ट ऐक्शन के लिए दस्तावेज़ अपने संबंधित कॉन्सटेंट फ़ील्ड में उपलब्ध होता है.

सिस्टम ब्रॉडकास्ट में बदलाव

जैसे-जैसे Android प्लैटफ़ॉर्म आगे बढ़ रहा है, सिस्टम ब्रॉडकास्ट करने के तरीके में समय-समय पर बदलाव करता रहता है व्यवहार. Android के सभी वर्शन पर काम करने के लिए इन बदलावों को ध्यान में रखें.

Android 14

जब ऐप्लिकेशन कैश मेमोरी में सेव किए गए हों स्थिति, ब्रॉडकास्ट डिलीवरी सिस्टम की परफ़ॉर्मेंस के लिए ऑप्टिमाइज़ किया गया है. उदाहरण के लिए, ऐसे कुछ सिस्टम ब्रॉडकास्ट होते हैं जो ज़्यादा ज़रूरी नहीं हैं क्योंकि ACTION_SCREEN_ON यह हैं कैश मेमोरी में सेव किए जाने की स्थिति में ऐप्लिकेशन के लिए रुका हुआ है. ऐप्लिकेशन को कैश मेमोरी से हटाने के बाद एक ऐक्टिव प्रोसेस में शामिल करें लाइफ़साइकल का इस्तेमाल करता है, तो सिस्टम की वजह से हो सकता है.

ऐसे ज़रूरी ब्रॉडकास्ट जिनके बारे में यहां बताया गया है मेनिफ़ेस्ट 'कैश मेमोरी में सेव किए गए ऐप्लिकेशन' से कुछ समय के लिए ऐप्लिकेशन हटाता है डिलीवरी की स्थिति.

Android 9

Android 9 (एपीआई लेवल 28) और इसके बाद के वर्शन में, NETWORK_STATE_CHANGED_ACTION ब्रॉडकास्ट को उपयोगकर्ता की जगह की जानकारी या निजी तौर पर जानकारी नहीं मिलती की पहचान कर सकता है.

इसके अलावा, अगर आपका ऐप्लिकेशन Android 9 या इसके बाद के वर्शन वाले डिवाइस पर इंस्टॉल किया गया है, वाई-फ़ाई से मिलने वाले सिस्टम ब्रॉडकास्ट में SSID, BSSID, कनेक्शन नहीं हैं या खोज के नतीजे देखें. यह जानकारी पाने के लिए, यहां कॉल करें getConnectionInfo() आज़माएं.

Android 8.0

Android 8.0 (एपीआई लेवल 26) और इसके बाद के वर्शन में, यह सिस्टम मेनिफ़ेस्ट किए गए पाने वालों पर पाबंदी है.

अगर आपका ऐप्लिकेशन Android 8.0 या इसके बाद वाले वर्शन को टारगेट करता है, तो मेनिफ़ेस्ट का इस्तेमाल इन कामों के लिए नहीं किया जा सकता ज़्यादातर इंप्लिसिट ब्रॉडकास्ट (टारगेट नहीं किए जाने वाले ब्रॉडकास्ट) के लिए रिसीवर की घोषणा करें खास तौर पर आपके ऐप्लिकेशन के लिए). अब भी इनका इस्तेमाल किया जा सकता है: कॉन्टेक्स्ट के हिसाब से रजिस्टर किया गया रिसीवर उपयोगकर्ता सक्रिय रूप से आपके ऐप्लिकेशन का इस्तेमाल कर रहा हो.

Android 7.0

Android 7.0 (एपीआई लेवल 24) और उसके बाद के वर्शन, यह सिस्टम नहीं भेजते ब्रॉडकास्ट:

साथ ही, Android 7.0 और इसके बाद वाले वर्शन को टारगेट करने वाले ऐप्लिकेशन को CONNECTIVITY_ACTION ब्रॉडकास्ट को रजिस्टर करना होगा registerReceiver(BroadcastReceiver, IntentFilter) का इस्तेमाल करके. मेनिफ़ेस्ट में रिसीवर का एलान करने से काम नहीं होता.

ब्रॉडकास्ट मिल रहे हैं

ऐप्लिकेशन दो तरीकों से ब्रॉडकास्ट पा सकते हैं: मेनिफ़ेस्ट की ओर से घोषित किए गए रिसीवर के ज़रिए और कॉन्टेक्स्ट के हिसाब से रजिस्टर किए हुए रिसीवर के लिए.

मेनिफ़ेस्ट के एलान किए गए रिसीवर

अगर मेनिफ़ेस्ट में ब्रॉडकास्ट रिसीवर के बारे में जानकारी दी जाती है, तो सिस्टम (अगर ऐप्लिकेशन पहले से नहीं चल रहा हो), तो ब्रॉडकास्ट भेजने के लिए इस ऐप्लिकेशन का इस्तेमाल करें.

मेनिफ़ेस्ट में ब्रॉडकास्ट रिसीवर की जानकारी देने के लिए, यह तरीका अपनाएं:

  1. <receiver> के बारे में बताएं एलिमेंट शामिल करना है.

    <!-- If this receiver listens for broadcasts sent from the system or from
         other apps, even other apps that you own, set android:exported to "true". -->
    <receiver android:name=".MyBroadcastReceiver" android:exported="false">
        <intent-filter>
            <action android:name="APP_SPECIFIC_BROADCAST" />
        </intent-filter>
    </receiver>
    

    इंटेंट फ़िल्टर, उन ब्रॉडकास्ट कार्रवाइयों के बारे में बताते हैं जिनकी सदस्यता आपके पाने वाले ने ली है.

  2. BroadcastReceiver सब-क्लास को लागू करना और onReceive(Context, Intent) को लागू करना. कॉन्टेंट बनाने ब्रॉडकास्ट रिसीवर के लिए, नीचे दिए गए उदाहरण के लॉग में जाएं और कॉन्टेंट दिखाएं ब्रॉडकास्ट का समय:

    Kotlin

    private const val TAG = "MyBroadcastReceiver"
    
    class MyBroadcastReceiver : BroadcastReceiver() {
    
        override fun onReceive(context: Context, intent: Intent) {
            StringBuilder().apply {
                append("Action: ${intent.action}\n")
                append("URI: ${intent.toUri(Intent.URI_INTENT_SCHEME)}\n")
                toString().also { log ->
                    Log.d(TAG, log)
    
                    val binding = ActivityNameBinding.inflate(layoutInflater)
                    val view = binding.root
                    setContentView(view)
    
                    Snackbar.make(view, log, Snackbar.LENGTH_LONG).show()
                }
            }
        }
    }
    

    Java

    public class MyBroadcastReceiver extends BroadcastReceiver {
            private static final String TAG = "MyBroadcastReceiver";
            @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();
                Log.d(TAG, log);
    
                ActivityNameBinding binding =
                        ActivityNameBinding.inflate(layoutInflater);
                val view = binding.root;
                setContentView(view);
    
                Snackbar.make(view, log, Snackbar.LENGTH_LONG).show();
            }
        }
    

    व्यू बाइंडिंग चालू करने के लिए, अपने मॉड्यूल-लेवल में viewBinding कॉन्फ़िगर करें Build.gradle फ़ाइल में.

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

सिस्टम एक नया BroadcastReceiver कॉम्पोनेंट बनाता है ऑब्जेक्ट जोड़ने की कोशिश की जाती है. यह ऑब्जेक्ट सिर्फ़ मान्य है onReceive(Context, Intent) को कॉल करने की अवधि के लिए. कोड डालने के बाद इस तरीके से रिटर्न करने पर, सिस्टम मानता है कि कॉम्पोनेंट अब सक्रिय है.

कॉन्टेक्स्ट के हिसाब से रजिस्टर किए गए रिसीवर

कॉन्टेक्स्ट के हिसाब से रजिस्टर किए गए रिसीवर को तब तक ब्रॉडकास्ट मिलते रहेंगे, जब तक उन्हें रजिस्टर नहीं किया जाता संदर्भ मान्य है. उदाहरण के लिए, अगर आपने Activity अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है संदर्भ के लिए, आपको तब तक ब्रॉडकास्ट मिलते रहेंगे, जब तक कि गतिविधि खत्म न हो जाए. अगर आपको ऐप्लिकेशन के कॉन्टेक्स्ट के साथ रजिस्टर करने पर, आपको तब तक ब्रॉडकास्ट मिलते रहेंगे, जब तक ऐप्लिकेशन चल रहा है.

कॉन्टेक्स्ट के साथ रिसीवर को रजिस्टर करने के लिए, यह तरीका अपनाएं:

  1. अपने ऐप्लिकेशन की मॉड्यूल-लेवल बिल्ड फ़ाइल में, 1.9.0 या इसके बाद वाला वर्शन शामिल करें AndroidX Core लाइब्रेरी से लिंक किया जा सकता है:

    ग्रूवी

    dependencies {
        def core_version = "1.13.1"
    
        // Java language implementation
        implementation "androidx.core:core:$core_version"
        // Kotlin
        implementation "androidx.core:core-ktx:$core_version"
    
        // To use RoleManagerCompat
        implementation "androidx.core:core-role:1.0.0"
    
        // To use the Animator APIs
        implementation "androidx.core:core-animation:1.0.0"
        // To test the Animator APIs
        androidTestImplementation "androidx.core:core-animation-testing:1.0.0"
    
        // Optional - To enable APIs that query the performance characteristics of GMS devices.
        implementation "androidx.core:core-performance:1.0.0"
    
        // Optional - to use ShortcutManagerCompat to donate shortcuts to be used by Google
        implementation "androidx.core:core-google-shortcuts:1.1.0"
    
        // Optional - to support backwards compatibility of RemoteViews
        implementation "androidx.core:core-remoteviews:1.1.0"
    
        // Optional - APIs for SplashScreen, including compatibility helpers on devices prior Android 12
        implementation "androidx.core:core-splashscreen:1.2.0-alpha02"
    }
    

    Kotlin

    dependencies {
        val core_version = "1.13.1"
    
        // Java language implementation
        implementation("androidx.core:core:$core_version")
        // Kotlin
        implementation("androidx.core:core-ktx:$core_version")
    
        // To use RoleManagerCompat
        implementation("androidx.core:core-role:1.0.0")
    
        // To use the Animator APIs
        implementation("androidx.core:core-animation:1.0.0")
        // To test the Animator APIs
        androidTestImplementation("androidx.core:core-animation-testing:1.0.0")
    
        // Optional - To enable APIs that query the performance characteristics of GMS devices.
        implementation("androidx.core:core-performance:1.0.0")
    
        // Optional - to use ShortcutManagerCompat to donate shortcuts to be used by Google
        implementation("androidx.core:core-google-shortcuts:1.1.0")
    
        // Optional - to support backwards compatibility of RemoteViews
        implementation("androidx.core:core-remoteviews:1.1.0")
    
        // Optional - APIs for SplashScreen, including compatibility helpers on devices prior Android 12
        implementation("androidx.core:core-splashscreen:1.2.0-alpha02")
    }
    
  2. का एक इंस्टेंस बनाएं BroadcastReceiver:

    Kotlin

    val br: BroadcastReceiver = MyBroadcastReceiver()
    

    Java

    BroadcastReceiver br = new MyBroadcastReceiver();
    
  3. का एक इंस्टेंस बनाएं IntentFilter:

    Kotlin

    val filter = IntentFilter(APP_SPECIFIC_BROADCAST)
    

    Java

    IntentFilter filter = new IntentFilter(APP_SPECIFIC_BROADCAST);
    
  4. चुनें कि ब्रॉडकास्ट रिसीवर को एक्सपोर्ट किया जाए या नहीं. अन्य ऐप्लिकेशन डाउनलोड करें. अगर यह रिसीवर भेजे गए ब्रॉडकास्ट को सुन रहा है, तो सिस्टम या अन्य ऐप्लिकेशन से—यहां तक कि आपके मालिकाना हक वाले अन्य ऐप्लिकेशन से भी— RECEIVER_EXPORTED फ़्लैग. अगर इसके बजाय, यह रिसीवर सिर्फ़ आपके ऐप्लिकेशन से भेजे गए ब्रॉडकास्ट के लिए, RECEIVER_NOT_EXPORTED फ़्लैग का इस्तेमाल करें.

    Kotlin

    val listenToBroadcastsFromOtherApps = false
    val receiverFlags = if (listenToBroadcastsFromOtherApps) {
        ContextCompat.RECEIVER_EXPORTED
    } else {
        ContextCompat.RECEIVER_NOT_EXPORTED
    }
    

    Java

    boolean listenToBroadcastsFromOtherApps = false;
    if (listenToBroadcastsFromOtherApps) {
        receiverFlags = ContextCompat.RECEIVER_EXPORTED;
    } else {
        receiverFlags = ContextCompat.RECEIVER_NOT_EXPORTED;
    }
    
  5. कॉल करके, पैसे पाने वाले व्यक्ति को रजिस्टर करें registerReceiver():

    Kotlin

    ContextCompat.registerReceiver(context, br, filter, receiverFlags)
    

    Java

    ContextCompat.registerReceiver(context, br, filter, receiverFlags);
    
  6. ब्रॉडकास्ट बंद करने के लिए, unregisterReceiver(android.content.BroadcastReceiver) पर कॉल करें. अगर आपको फ़ाइल पाने वाले व्यक्ति की ज़रूरत न हो, तो उसका रजिस्ट्रेशन रद्द कर दें या संदर्भ अब मान्य नहीं है.

    इस बात का ध्यान रखें कि पैसे पाने वाले व्यक्ति के लिए, आपने कहां रजिस्टर और रजिस्ट्रेशन रद्द किया है उदाहरण के लिए, गतिविधि के संदर्भ का इस्तेमाल करके onCreate(Bundle) में, पाने वाले व्यक्ति को रजिस्टर करने पर को onDestroy() में इसका पंजीकरण रद्द करना होगा सूचना पाने वाले व्यक्ति को गतिविधि के कॉन्टेक्स्ट से लीक होने से बचाएं. अगर आप रजिस्टर करते हैं onResume() में मौजूद है, तो आपको इसे रोकने के लिए onPause() में इसका रजिस्ट्रेशन रद्द करें कई बार रजिस्टर किया जा रहा हो (अगर आपको अपनी पसंद के मुताबिक ब्रॉडकास्ट नहीं होने हैं रोकने के लिए भी किया जा सकता है. इससे सिस्टम का गै़र-ज़रूरी ओवरहेड कम हो सकता है. ऐसा न करें onSaveInstanceState(Bundle) में रजिस्ट्रेशन रद्द करें, क्योंकि अगर उपयोगकर्ता, इतिहास स्टैक में वापस जाता है, तो इसे कॉल नहीं किया जाता.

प्रोसेस की स्थिति पर असर

क्या आपके BroadcastReceiver काम कर रहा हो या उसकी शामिल प्रक्रिया को प्रभावित नहीं करता हो, जिससे इसके को नुकसान पहुंचने की संभावना बढ़ जाती है. फ़ोरग्राउंड प्रोसेस, रिसीवर के onReceive() तरीके को लागू करती है. कॉन्टेंट बनाने मेमोरी के बहुत ज़्यादा दबाव को छोड़कर, सिस्टम प्रोसेस को चलाता है.

BroadcastReceiver को onReceive() के बाद बंद कर दिया जाता है. कॉन्टेंट पाने वाले का होस्ट की प्रोसेस उतनी ही अहम होती है जितनी इसके ऐप्लिकेशन कॉम्पोनेंट के लिए होती है. अगर वह प्रोसेस सिर्फ़ होस्ट ऐप्लिकेशन का एलान करने वाला व्यक्ति (ऐसे ऐप्लिकेशन में बार-बार सामने आता है जो ऐप्लिकेशन इस्तेमाल करने वाले व्यक्ति ने पहले कभी ऐसा न किया हो) या हाल ही में इंटरैक्ट नहीं किया है), सिस्टम onReceive() के बाद इसे बंद कर सकता है अन्य अहम प्रोसेस के लिए उपलब्ध संसाधन.

इसलिए, ब्रॉडकास्ट रिसीवर को लंबे समय तक चलने वाले बैकग्राउंड थ्रेड को शुरू नहीं करना चाहिए. सिस्टम, onReceive() के बाद फिर से दावा करने की प्रोसेस को किसी भी समय रोक सकता है मेमोरी में सेव किया जाएगा, ताकि बनाए गए थ्रेड को बंद किया जा सके. इस प्रोसेस को जारी रखने के लिए, JobService अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है JobScheduler का इस्तेमाल करके, पैसे पाने वाले व्यक्ति से मिले इससे सिस्टम को पता चलता है कि प्रोसेस अब भी काम कर रही है. बैकग्राउंड में काम करने की सुविधा की खास जानकारी से आपको ज़्यादा जानकारी मिलती है.

ब्रॉडकास्ट भेजे जा रहे हैं

Android, ऐप्लिकेशन को ब्रॉडकास्ट भेजने के तीन तरीके उपलब्ध कराता है:

  • sendOrderedBroadcast(Intent, String) विधि का उपयोग करके एक समय में एक ही रिसीवर को ब्रॉडकास्ट भेजा जाता है. डेटा पाने वाला हर व्यक्ति डिवाइस पर काम करता है जवाब में, वह नतीजे को अगले रिसीवर में ले जा सकता है या प्रसारण को पूरी तरह रद्द कर देता है ताकि वह अन्य को न भेजा जाए रिसीवर. ऑर्डर के लिए इस्तेमाल किए जाने वाले डिवाइसों को, मिलते-जुलते इंटेंट फ़िल्टर की android:प्राथमिकता एट्रिब्यूट; पाने वाले जिनके पास वही प्राथमिकता मनचाहे क्रम में चलेगी.
  • sendBroadcast(Intent) तरीका भेजता है सभी रिसीवर को किसी तय क्रम में ब्रॉडकास्ट करता है. इसे नॉर्मल कहते हैं ब्रॉडकास्ट. यह ज़्यादा बेहतर है, लेकिन इसका मतलब है कि रिसीवर को टेक्स्ट पढ़ने की अनुमति नहीं है पाने वाले अन्य लोगों से मिले नतीजे देख सकते हैं, ब्रॉडकास्ट से मिले डेटा का गलत तरीके से इस्तेमाल कर सकते हैं या ब्रॉडकास्ट रद्द करो.

नीचे दिया गया कोड स्निपेट बताता है कि कैसे sendBroadcast(Intent) को इंटेंट और कॉल करने की सुविधा.

Kotlin

Intent().also { intent ->
    intent.setAction("com.example.broadcast.MY_NOTIFICATION")
    intent.putExtra("data", "Nothing to see here, move along.")
    sendBroadcast(intent)
}

Java

Intent intent = new Intent();
intent.setAction("com.example.broadcast.MY_NOTIFICATION");
intent.putExtra("data", "Nothing to see here, move along.");
sendBroadcast(intent);

ब्रॉडकास्ट मैसेज, Intent ऑब्जेक्ट में रैप किया जाता है. इंटेंट की कार्रवाई स्ट्रिंग में ऐप्लिकेशन के Java पैकेज का नाम सिंटैक्स देना ज़रूरी है और ब्रॉडकास्ट इवेंट को खास तौर पर पहचानने में मदद मिलती है. अतिरिक्त जानकारी अटैच की जा सकती है putExtra(String, Bundle) के साथ इंटेंट के मुताबिक. आप चाहें, तो एक ही संगठन में मौजूद कुछ ऐप्लिकेशन के लिए भी ब्रॉडकास्ट को सीमित किया जा सकता है. इसके लिए, इंटेंट पर setPackage(String) को कॉल किया जा रहा है.

ब्रॉडकास्ट पर पाबंदी लगाने के लिए अनुमतियां दी जा रही हैं

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

अनुमतियों के साथ भेजें

sendBroadcast(Intent, String) को कॉल करने पर या sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle), आप तय कर सकते हैं कि अनुमति पैरामीटर. सिर्फ़ पैसे पाने वाले वे लोग जिन्होंने इसकी मदद से अनुमति मांगी है टैग को अपने मेनिफ़ेस्ट में शामिल कर लिया है (और बाद में अनुमति) प्रसारण प्राप्त कर सकते हैं. उदाहरण के लिए, यह कोड ब्रॉडकास्ट भेजता है:

Kotlin

sendBroadcast(Intent(BluetoothDevice.ACTION_FOUND),
              Manifest.permission.BLUETOOTH_CONNECT)

Java

sendBroadcast(new Intent(BluetoothDevice.ACTION_FOUND),
              Manifest.permission.BLUETOOTH_CONNECT)

ब्रॉडकास्ट मैसेज पाने के लिए, इस सुविधा का इस्तेमाल करने वाले ऐप्लिकेशन को इस अनुमति का अनुरोध करना होगा: नीचे दी गई जानकारी देखें:

<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>

आप या तो मौजूदा सिस्टम अनुमति तय कर सकते हैं जैसे BLUETOOTH_CONNECT अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है या इसके साथ एक कस्टम अनुमति परिभाषित करें <permission> एलिमेंट. इसके लिए अनुमतियों और सुरक्षा से जुड़ी सामान्य जानकारी के लिए, सिस्टम अनुमतियां.

अनुमतियों के साथ पाना

अगर ब्रॉडकास्ट रिसीवर को रजिस्टर करते समय अनुमति का पैरामीटर तय किया जाता है (registerReceiver(BroadcastReceiver, IntentFilter, String, Handler) के साथ या इसमें <receiver> आपके मेनिफ़ेस्ट) है, तो केवल वे ब्रॉडकास्टर जिन्हें आपने <uses-permission> टैग की अनुमति नहीं दी गई है (और बाद में अनुमति दे दी गई है, अगर खतरनाक) रिसीवर को एक इंटेंट भेज सकते हैं.

उदाहरण के लिए, मान लीजिए कि आपके ऐप्लिकेशन में मालिकाना हक हासिल करने वाले ऐप्लिकेशन के पास, मेनिफ़ेस्ट में बताया गया एक रिसीवर है नीचे दी गई जानकारी देखें:

<receiver android:name=".MyBroadcastReceiver"
          android:permission="android.permission.BLUETOOTH_CONNECT">
    <intent-filter>
        <action android:name="android.intent.action.ACTION_FOUND"/>
    </intent-filter>
</receiver>

इसके अलावा, आपका ऐप्लिकेशन पाने वाले ऐप्लिकेशन में, कॉन्टेक्स्ट के हिसाब से रजिस्टर किया गया रिसीवर मौजूद है. इसका उदाहरण नीचे दिया गया है:

Kotlin

var filter = IntentFilter(Intent.ACTION_FOUND)
registerReceiver(receiver, filter, Manifest.permission.BLUETOOTH_CONNECT, null )

Java

IntentFilter filter = new IntentFilter(Intent.ACTION_FOUND);
registerReceiver(receiver, filter, Manifest.permission.BLUETOOTH_CONNECT, null );

इसके बाद, उन लोगों को ब्रॉडकास्ट भेजने के लिए, भेजने वाले ऐप्लिकेशन को यह ज़रूरी है अनुमति का अनुरोध करें, जैसा कि नीचे दिखाया गया है:

<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>

सुरक्षा से जुड़ी बातें और सबसे सही तरीके

यहां ईमेल भेजने और पाने के लिए, सुरक्षा से जुड़ी कुछ बातें और सबसे सही तरीके बताए गए हैं प्रसारण प्राप्त कर रहे हैं:

  • अगर कई ऐप्लिकेशन ने नहीं है, तो इससे सिस्टम बहुत सारे ऐप्लिकेशन लॉन्च कर सकता है, जिससे डिवाइस की परफ़ॉर्मेंस और उपयोगकर्ता अनुभव, दोनों पर काफ़ी असर पड़ सकता है. इससे बचने के लिए हैं, तो मेनिफ़ेस्ट रजिस्ट्रेशन के बजाय कॉन्टेक्स्ट रजिस्ट्रेशन का इस्तेमाल करें. कभी-कभी, Android सिस्टम अपने-आप ही कॉन्टेक्स्ट-रजिस्टर्ड थीम लागू करता है रिसीवर. उदाहरण के लिए, CONNECTIVITY_ACTION का ब्रॉडकास्ट डिलीवर किया गया सिर्फ़ कॉन्टेक्स्ट के हिसाब से रजिस्टर किए गए लोगों के लिए.

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

    • ब्रॉडकास्ट भेजते समय, आपके पास अनुमति तय करने का विकल्प होता है.
    • Android 4.0 और उसके बाद के वर्शन में, पैकेज setPackage(String) ब्रॉडकास्ट. सिस्टम, ब्रॉडकास्ट को सिर्फ़ ऐसे ऐप्लिकेशन के लिए सेट करता है जो से मेल खाती हो.
  • किसी रिसीवर को रजिस्टर करने पर, कोई भी ऐप्लिकेशन नुकसान पहुंचाने वाला मैसेज भेज सकता है आपके ऐप्लिकेशन के रिसीवर को ब्रॉडकास्ट करता है. हमारे पास आपके विज्ञापन को सीमित करने के कई आपके ऐप्लिकेशन को मिलने वाले ब्रॉडकास्ट:

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

  • क्योंकि पेमेंट पाने वाले व्यक्ति का onReceive(Context, Intent) तरीका चालू है मुख्य थ्रेड के लिए, उसे जल्दी से एक्ज़ीक्यूट किया जाना चाहिए और वापस आना चाहिए. अगर आपको लंबे समय तक चलने वाला काम न करें. धागे को बड़ा करने या शुरू करने में सावधानी बरतें बैकग्राउंड में चलने वाली सेवाएं बंद कर देता है, क्योंकि सिस्टम पूरी प्रोसेस को onReceive() का शुल्क देकर, प्रॉडक्ट को लौटाया जा सकता है. ज़्यादा जानकारी के लिए, प्रोसेस पर पड़ने वाला असर देखें स्थिति लंबे समय तक चलने वाले काम को करने के लिए, हम सुझाव दें:

    • goAsync() को इस नंबर से कॉल किया जा रहा है: पाने वाले का onReceive() तरीका है और BroadcastReceiver.PendingResult को बैकग्राउंड थ्रेड में पास किया जा रहा है. इससे onReceive() से वापस आने के बाद भी ब्रॉडकास्ट चालू रहता है. हालांकि, इस तरीके के बावजूद, सिस्टम उम्मीद करता है कि प्रसारण को बहुत तेज़ी से (10 सेकंड से कम) को ब्रॉडकास्ट कर सकता है. इसकी मदद से, आपको मुख्य थ्रेड को गड़बड़ियों से बचाने के लिए, दूसरे थ्रेड पर काम करते हैं.
    • JobScheduler के साथ नौकरी शेड्यूल करना. ज़्यादा के लिए जानकारी के लिए, इंटेलिजेंट जॉब देखें शेड्यूल करना.
  • ब्रॉडकास्ट रिसीवर की गतिविधियां शुरू न करें, क्योंकि उपयोगकर्ताओं को झंकार है; खासकर तब, जब एक से ज़्यादा रिसीवर हों. इसके बजाय, इन बातों पर ध्यान दें सूचना दिखा रहा है.