सूचना के चैनल बनाना और उन्हें मैनेज करना

Android 8.0 (एपीआई लेवल 26) से, सभी सूचनाओं को किसी चैनल को असाइन करना ज़रूरी है. हर चैनल के लिए, विज़ुअल और ऑडियो से जुड़ी सेटिंग सेट की जा सकती है. ये सेटिंग, उस चैनल की सभी सूचनाओं पर लागू होती हैं. उपयोगकर्ता इन सेटिंग को बदल सकते हैं. साथ ही, यह तय कर सकते हैं कि आपके ऐप्लिकेशन के कौनसे सूचना चैनल, उपयोगकर्ताओं के लिए दखलअंदाज़ी करने वाले या दिखने वाले हो सकते हैं.

Android 8.0 में चैनलों और सूचनाओं से जुड़ी अन्य सुविधाओं के बारे में खास जानकारी पाने के लिए, यह वीडियो देखें.

सूचना चैनलों के लिए उपयोगकर्ता सेटिंग, सिस्टम सेटिंग में हर ऐप्लिकेशन के लिए उपलब्ध होती हैं. इन्हें पहली इमेज में दिखाया गया है.

पहली इमेज. Clock ऐप्लिकेशन और उसके किसी चैनल के लिए सूचना सेटिंग.

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

आपको जिस तरह की सूचनाएं भेजनी हैं उनके लिए अलग-अलग चैनल बनाएं. उपयोगकर्ताओं की पसंद के हिसाब से सूचना चैनल भी बनाए जा सकते हैं. उदाहरण के लिए, मैसेजिंग ऐप्लिकेशन में किसी उपयोगकर्ता की ओर से बनाए गए हर बातचीत ग्रुप के लिए, सूचना पाने के अलग-अलग चैनल सेट अप किए जा सकते हैं.

Android 8.0 (एपीआई लेवल 26) या इसके बाद के वर्शन को टारगेट करते समय, आपको एक या उससे ज़्यादा सूचना चैनल लागू करने होंगे. अगर आपका targetSdkVersion 25 या इससे पहले के वर्शन पर सेट है, तो Android 8.0 (एपीआई लेवल 26) या इसके बाद के वर्शन पर चलने वाले डिवाइसों पर आपका ऐप्लिकेशन, Android 7.1 (एपीआई लेवल 25) या इससे पहले के वर्शन पर चलने वाले डिवाइसों की तरह ही काम करेगा.

सूचना चैनल बनाना

सूचना चैनल बनाने के लिए, यह तरीका अपनाएं:

  1. NotificationChannel ऑब्जेक्ट बनाएं. इसमें यूनीक चैनल आईडी, उपयोगकर्ता को दिखने वाला नाम, और अहमियत का लेवल शामिल होना चाहिए.

  2. उपयोगकर्ता को सिस्टम सेटिंग में setDescription() के साथ दिखने वाला ब्यौरा भी दिया जा सकता है. हालांकि, ऐसा करना ज़रूरी नहीं है.

  3. सूचना के चैनल को createNotificationChannel() में पास करके रजिस्टर करें.

यहां दिए गए उदाहरण में, सूचना चैनल बनाने और रजिस्टर करने का तरीका बताया गया है:

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
      // Create the NotificationChannel.
      val name = getString(R.string.channel_name)
      val descriptionText = getString(R.string.channel_description)
      val importance = NotificationManager.IMPORTANCE_DEFAULT
      val mChannel = NotificationChannel(CHANNEL_ID, name, importance)
      mChannel.description = descriptionText
      // Register the channel with the system. You can't change the importance
      // or other notification behaviors after this.
      val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
      notificationManager.createNotificationChannel(mChannel)
  }

मौजूदा सूचना चैनल को उसकी मूल वैल्यू के साथ फिर से बनाने पर कोई कार्रवाई नहीं होती. इसलिए, ऐप्लिकेशन शुरू करते समय इस कोड को कॉल करना सुरक्षित है.

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

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

createNotificationChannels() को कॉल करके, एक ही ऑपरेशन में कई सूचना चैनल भी बनाए जा सकते हैं.

अहमियत का लेवल सेट करना

चैनल की अहमियत के हिसाब से, चैनल में पोस्ट की गई सभी सूचनाओं के लिए रुकावट का लेवल तय होता है. इसे NotificationChannel कंस्ट्रक्टर में बताएं. इसके लिए, पांच में से किसी एक लेवल का इस्तेमाल करें. ये लेवल, IMPORTANCE_NONE(0) से लेकर IMPORTANCE_HIGH(4) तक होते हैं.

Android 7.1 (एपीआई लेवल 25) या इससे पहले के वर्शन वाले डिवाइसों पर सूचनाएं पाने के लिए, आपको हर सूचना के लिए setPriority() को कॉल करना होगा. इसके लिए, NotificationCompat क्लास से प्राथमिकता वाला कॉन्स्टेंट इस्तेमाल करें.

अहमियत (NotificationManager.IMPORTANCE_*) और प्राथमिकता (NotificationCompat.PRIORITY_*) कॉन्स्टेंट, उपयोगकर्ता को दिखने वाले अहमियत के विकल्पों से मैप होते हैं. जैसा कि इस टेबल में दिखाया गया है.

उपयोगकर्ता को दिखने वाला अहमियत का लेवल अहमियत (Android 8.0 और इसके बाद के वर्शन) प्राथमिकता (Android 7.1 और इससे पहले के वर्शन)
ज़रूरी
इस तरह की सूचनाएं सुनाई देती हैं और स्क्रीन पर सबसे ऊपर सूचना देने वाले कार्ड के तौर पर दिखती हैं.
IMPORTANCE_HIGH PRIORITY_HIGH या PRIORITY_MAX
ज़्यादा
आवाज़ करता है.
IMPORTANCE_DEFAULT PRIORITY_DEFAULT
मीडियम
कोई आवाज़ नहीं आती.
IMPORTANCE_LOW PRIORITY_LOW
बिना आवाज़ वाली सूचनाएं
इन सूचनाओं से किसी तरह की आवाज़ नहीं होती और ये स्टेटस बार में नहीं दिखती हैं.
IMPORTANCE_MIN PRIORITY_MIN
कोई नहीं
इस विकल्प को चुनने पर, सूचना आने पर कोई आवाज़ नहीं होती. साथ ही, यह स्टेटस बार या सूचना पैनल में भी नहीं दिखती.
IMPORTANCE_NONE N/A

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

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

प्राथमिकता का सही लेवल चुनने के बारे में जानकारी पाने के लिए, सूचनाओं के डिज़ाइन से जुड़ी गाइड में "प्राथमिकता के लेवल" देखें.

सूचना चैनल की सेटिंग पढ़ना

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

  1. getNotificationChannel() या getNotificationChannels() को कॉल करके, NotificationChannel ऑब्जेक्ट पाएं.

  2. चैनल की सेटिंग के बारे में क्वेरी करें. जैसे, getVibrationPattern(), getSound(), और getImportance().

अगर आपको चैनल की कोई ऐसी सेटिंग मिलती है जिससे आपके ऐप्लिकेशन के काम करने के तरीके पर असर पड़ता है, तो उपयोगकर्ता को उस सेटिंग को बदलने का सुझाव दिया जा सकता है. साथ ही, चैनल की सेटिंग खोलने का विकल्प दिया जा सकता है. इसके बारे में अगले सेक्शन में बताया गया है.

सूचना चैनल की सेटिंग खोलें

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

ACTION_CHANNEL_NOTIFICATION_SETTINGS ऐक्शन का इस्तेमाल करने वाले Intent की मदद से, सूचना चैनलों के लिए सिस्टम सेटिंग खोली जा सकती हैं.

उदाहरण के लिए, यहां दिए गए सैंपल कोड में दिखाया गया है कि किसी उपयोगकर्ता को सूचना चैनल की सेटिंग पर कैसे रीडायरेक्ट किया जा सकता है:

  val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply {
      putExtra(Settings.EXTRA_APP_PACKAGE, packageName)
      putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId())
  }
  startActivity(intent)

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

सूचना चैनल मिटाना

deleteNotificationChannel() पर कॉल करके, सूचना के चैनल मिटाए जा सकते हैं. इस प्रोसेस को पूरा करने का तरीका बताने वाला सैंपल कोड यहां दिया गया है:

  // The id of the channel.
  val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
  val id: String = "my_channel_01"
  notificationManager.deleteNotificationChannel(id)

सूचना चैनल ग्रुप बनाना

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

दूसरी इमेज. निजी और काम से जुड़े खातों के लिए, सूचना चैनल की सेटिंग वाले ग्रुप.

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

  • दो चैनलों वाला निजी खाता:

    • नई टिप्पणियां

    • पोस्ट के सुझाव

  • दो चैनलों वाला एक कारोबारी खाता:

    • नई टिप्पणियां

    • पोस्ट के सुझाव

सूचना चैनलों को हर खाते के लिए ग्रुप में व्यवस्थित करने से, उपयोगकर्ता उनके बीच अंतर कर पाते हैं.

हर सूचना चैनल ग्रुप के लिए एक आईडी की ज़रूरत होती है. यह आईडी आपके पैकेज में यूनीक होना चाहिए. साथ ही, यह ऐसा नाम होना चाहिए जो उपयोगकर्ता को दिखे. यहां दिए गए स्निपेट में, सूचना चैनल ग्रुप बनाने का तरीका बताया गया है.

  // The id of the group.
  val groupId = "my_group_01"
  // The user-visible name of the group.
  val groupName = getString(R.string.group_name)
  val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
  <b>notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))</b>

नया ग्रुप बनाने के बाद, ग्रुप के साथ नया NotificationChannel ऑब्जेक्ट जोड़ने के लिए, setGroup() को कॉल किया जा सकता है.

चैनल को सूचना मैनेजर में सबमिट करने के बाद, सूचना चैनल और ग्रुप के बीच के असोसिएशन को बदला नहीं जा सकता.