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

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() में पास करके रजिस्टर करें.

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

Kotlin

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)
}

Java

private void createNotificationChannel() {
    // Create the NotificationChannel, but only on API 26+ because
    // the NotificationChannel class is not in the Support Library.
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        CharSequence name = getString(R.string.channel_name);
        String description = getString(R.string.channel_description);
        int importance = NotificationManager.IMPORTANCE_DEFAULT;
        NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
        channel.setDescription(description);
        // Register the channel with the system. You can't change the importance
        // or other notification behaviors after this.
        NotificationManager notificationManager = getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
    }
}

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

डिफ़ॉल्ट रूप से, किसी चैनल पर पोस्ट की गई सभी सूचनाएं, 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 की मदद से, सूचना चैनलों के लिए सिस्टम सेटिंग खोली जा सकती हैं.

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

Kotlin

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

Java

Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
intent.putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId());
startActivity(intent);

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

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

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

Kotlin

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

Java

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

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

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

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

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

  • एक निजी खाता, जिससे दो चैनल जुड़े हैं:

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

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

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

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

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

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

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

Kotlin

// 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
notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))

Java

// The id of the group.
String groupId = "my_group_01";
// The user-visible name of the group.
CharSequence groupName = getString(R.string.group_name);
NotificationManager notificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.createNotificationChannelGroup(new NotificationChannelGroup(groupId, groupName));

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

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