सूचना बबल की मदद से, लोग बातचीत को आसानी से देख पाते हैं और उनमें शामिल हो पाते हैं.
ये बबल, अन्य ऐप्लिकेशन के कॉन्टेंट के ऊपर दिखते हैं. लोग इन बबल को बड़ा करके, ऐप्लिकेशन का कॉन्टेंट देख सकते हैं और उसके साथ इंटरैक्ट कर सकते हैं. साथ ही, इस्तेमाल न करने पर इन्हें छोटा भी किया जा सकता है.
डिवाइस लॉक होने या हमेशा चालू रहने वाली स्क्रीन चालू होने पर, बबल सामान्य सूचनाओं की तरह दिखते हैं.
लोग, सूचना बबल की सुविधा चालू कर सकते हैं. इसके लिए, उन्हें सूचनाओं पर मौजूद बबल बटन पर टैप करना होगा. यह बटन, बबल की सुविधा देने वाली सूचनाओं पर ही दिखता है. इससे, चुनी गई चैट हमेशा बबल के तौर पर दिखती है. सेटिंग में जाकर, लोग यह तय कर सकते हैं कि किन चैट को बबल के तौर पर दिखाना है. इसके अलावा, वे पूरे ऐप्लिकेशन के लिए सेटिंग में बदलाव भी कर सकते हैं.
लोग ये काम कर सकते हैं:
- आपके ऐप्लिकेशन से मिलने वाले सभी सूचना बबल को ब्लॉक करना. सूचनाएं ब्लॉक नहीं होती हैं, लेकिन वे कभी भी बबल के तौर पर नहीं दिखती हैं.
- आपके ऐप्लिकेशन से मिलने वाले चुनिंदा सूचना बबल को अनुमति देना. बबल बटन का इस्तेमाल करके बबल के तौर पर दिखने वाली सूचनाएं "चुनिंदा" होती हैं.
- आपके ऐप्लिकेशन से मिलने वाले सभी सूचना बबल को अनुमति देना.
BubbleMetadataके साथ भेजी गई सभी सूचनाएं, बबल के तौर पर दिखती हैं.
सूचना बबल एपीआई
सूचना बबल, सूचना एपीआई का इस्तेमाल करके बनाए जाते हैं. अगर आपको अपनी सूचना को बबल के तौर पर दिखाना है, तो उसमें अतिरिक्त डेटा जोड़ें.
बबल का बड़ा व्यू, आपकी चुनी गई गतिविधि से बनता है. गतिविधि को बबल के तौर पर सही तरीके से दिखाने के लिए, उसे कॉन्फ़िगर करें. गतिविधि का साइज़ बदला जा सकता है और उसे एम्बेड किया जा सकता है. अगर इनमें से कोई भी शर्त पूरी नहीं होती है, तो सिस्टम उसे सूचना के तौर पर दिखाता है.
यहां दिए गए कोड से, बबल को लागू करने का तरीका पता चलता है:
<activity
android:name=".bubbles.BubbleActivity"
android:theme="@style/AppTheme.NoActionBar"
android:label="@string/title_activity_bubble"
android:allowEmbedded="true"
android:resizeableActivity="true"
/>
अगर आपका ऐप्लिकेशन, एक ही तरह के कई बबल दिखाता है, जैसे कि अलग-अलग संपर्कों के साथ कई चैट, तो गतिविधि को कई इंस्टेंस लॉन्च करने की अनुमति देनी होगी. Android 10 और इससे पहले के वर्शन वाले डिवाइसों पर, सूचनाएं बबल के तौर पर नहीं दिखती हैं. ऐसा तब तक होता है, जब तक कि documentLaunchMode को "always" पर साफ़ तौर पर सेट न किया जाए. Android 11 से, आपको इस वैल्यू को साफ़ तौर पर सेट करने की ज़रूरत नहीं है. ऐसा इसलिए, क्योंकि सिस्टम सभी बातचीत के
documentLaunchMode को "always" पर अपने-आप सेट कर देता है.
सूचना बबल भेजने के लिए, यह तरीका अपनाएं:
- सामान्य तरीके से सूचना बनाएं.
BubbleMetadataऑब्जेक्ट बनाने के लिए,BubbleMetadata.Builder(PendingIntent, Icon)याBubbleMetadata.Builder(String)को कॉल करें.- सूचना में मेटाडेटा जोड़ने के लिए,
setBubbleMetadata()का इस्तेमाल करें. - अगर Android 11 या इसके बाद के वर्शन को टारगेट किया जा रहा है, तो पक्का करें कि बबल मेटाडेटा या सूचना, शेयर करने के शॉर्टकट को रेफ़र करती हो.
- अपने ऐप्लिकेशन में बदलाव करें, ताकि बबल के तौर पर दिखने वाली सूचनाएं कैंसल न हों.
यह देखने के लिए कि सूचना वाली गतिविधि, बबल के तौर पर लॉन्च हुई है या नहीं, कॉल करें
Activity#isLaunchedFromBubble(). सूचना कैंसल करने पर, स्क्रीन से बबल हट जाता है. बबल खोलने पर, उससे जुड़ी सूचना अपने-आप छिप जाती है.
यह तरीका, यहां दिए गए उदाहरण में दिखाया गया है:
Kotlin
// Create a bubble intent. val target = Intent(context, BubbleActivity::class.java) val bubbleIntent = PendingIntent.getActivity(context, 0, target, 0 /* flags */) val category = "com.example.category.IMG_SHARE_TARGET" val chatPartner = Person.Builder() .setName("Chat partner") .setImportant(true) .build() // Create a sharing shortcut. val shortcutId = generateShortcutId() val shortcut = ShortcutInfo.Builder(mContext, shortcutId) .setCategories(setOf(category)) .setIntent(Intent(Intent.ACTION_DEFAULT)) .setLongLived(true) .setShortLabel(chatPartner.name) .build() // Create a bubble metadata. val bubbleData = Notification.BubbleMetadata.Builder(bubbleIntent, Icon.createWithResource(context, R.drawable.icon)) .setDesiredHeight(600) .build() // Create a notification, referencing the sharing shortcut. val builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setBubbleMetadata(bubbleData) .setShortcutId(shortcutId) .addPerson(chatPartner)
Java
// Create a bubble intent. Intent target = new Intent(mContext, BubbleActivity.class); PendingIntent bubbleIntent = PendingIntent.getActivity(mContext, 0, target, 0 /* flags */); private val CATEGORY_TEXT_SHARE_TARGET = "com.example.category.IMG_SHARE_TARGET" Person chatPartner = new Person.Builder() .setName("Chat partner") .setImportant(true) .build(); // Create a sharing shortcut. private String shortcutId = generateShortcutId(); ShortcutInfo shortcut = new ShortcutInfo.Builder(mContext, shortcutId) .setCategories(Collections.singleton(CATEGORY_TEXT_SHARE_TARGET)) .setIntent(Intent(Intent.ACTION_DEFAULT)) .setLongLived(true) .setShortLabel(chatPartner.getName()) .build(); // Create a bubble metadata. Notification.BubbleMetadata bubbleData = new Notification.BubbleMetadata.Builder(bubbleIntent, Icon.createWithResource(context, R.drawable.icon)) .setDesiredHeight(600) .build(); // Create a notification, referencing the sharing shortcut. Notification.Builder builder = new Notification.Builder(mContext, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setBubbleMetadata(bubbleData) .setShortcutId(shortcutId) .addPerson(chatPartner);
अगर बबल भेजे जाने के दौरान आपका ऐप्लिकेशन फ़ोरग्राउंड में है, तो प्राथमिकता को अनदेखा कर दिया जाता है. साथ ही, आपका बबल हमेशा दिखता है. हालांकि, ऐसा तब तक होता है, जब तक कि लोग आपके ऐप्लिकेशन से मिलने वाले बबल या सूचनाओं को ब्लॉक न कर दें.
बड़ा बबल बनाना
बबल को अपने-आप बड़े साइज़ में दिखाने के लिए, उसे कॉन्फ़िगर किया जा सकता है. हमारा सुझाव है कि इस सुविधा का इस्तेमाल सिर्फ़ तब करें, जब लोग कोई ऐसी कार्रवाई करते हैं जिससे बबल दिखता है. जैसे, नई चैट शुरू करने के लिए किसी बटन पर टैप करना. इस मामले में, बबल बनने पर भेजी गई शुरुआती सूचना को छिपाना भी सही है.
फ़्लैग सेट करने के लिए, इन तरीकों का इस्तेमाल किया जा सकता है. इनसे ये व्यवहार चालू होते हैं:
setAutoExpandBubble()
और
setSuppressNotification().
यहां दिए गए उदाहरण में, बबल को अपने-आप बड़े साइज़ में दिखाने के लिए कॉन्फ़िगर करने का तरीका बताया गया है:
Kotlin
val bubbleMetadata = Notification.BubbleMetadata.Builder() .setDesiredHeight(600) .setIntent(bubbleIntent) .setAutoExpandBubble(true) .setSuppressNotification(true) .build()
Java
Notification.BubbleMetadata bubbleData = new Notification.BubbleMetadata.Builder() .setDesiredHeight(600) .setIntent(bubbleIntent) .setAutoExpandBubble(true) .setSuppressNotification(true) .build();
बबल के कॉन्टेंट की लाइफ़साइकल
बबल बड़ा होने पर, कॉन्टेंट वाली गतिविधि सामान्य प्रोसेस लाइफ़साइकल से गुज़रती है. इससे ऐप्लिकेशन, फ़ोरग्राउंड प्रोसेस बन जाता है. हालांकि, ऐसा तब होता है, जब वह पहले से फ़ोरग्राउंड प्रोसेस न हो.
बबल छोटा होने या खारिज होने पर, गतिविधि खत्म हो जाती है. इससे प्रोसेस कैश की जा सकती है और बाद में खत्म की जा सकती है. यह इस बात पर निर्भर करता है कि ऐप्लिकेशन में फ़ोरग्राउंड के अन्य कॉम्पोनेंट चल रहे हैं या नहीं.
बबल कब दिखते हैं
लोगों को होने वाली रुकावटों को कम करने के लिए, बबल सिर्फ़ कुछ खास मामलों में दिखते हैं.
अगर कोई ऐप्लिकेशन, Android 11 या इसके बाद के वर्शन को टारगेट करता है, तो सूचना बबल के तौर पर तब तक नहीं दिखती, जब तक कि वह बातचीत की ज़रूरी शर्तें पूरी न करे. अगर कोई ऐप्लिकेशन, Android 10 या इससे पहले के वर्शन को टारगेट करता है, तो सूचना बबल के तौर पर सिर्फ़ तब दिखती है, जब इनमें से एक या उससे ज़्यादा शर्तें पूरी होती हैं:
- सूचना में
MessagingStyleका इस्तेमाल किया गया हो और उसमें एकPersonजोड़ा गया हो. - सूचना,
`Service.startForeground`को कॉल करने से मिली हो,
Service.startForeground, उसकी `category`category, `CATEGORY_CALL`CATEGORY_CALLहो, और उसमेंPersonजोड़ा गया हो. - सूचना भेजे जाने के दौरान, ऐप्लिकेशन फ़ोरग्राउंड में हो.
अगर इनमें से कोई भी शर्त पूरी नहीं होती है, तो सूचना, बबल के बजाय दिखाई जाती है.
बबल से गतिविधियां लॉन्च करना
जब कोई बबल, नई गतिविधि लॉन्च करता है, तो नई गतिविधि या तो उसी टास्क और उसी बबल वाली विंडो में लॉन्च होगी या फ़ुलस्क्रीन में नए टास्क में लॉन्च होगी. ऐसा होने पर, उसे लॉन्च करने वाला बबल छोटा हो जाएगा.
बबल के टास्क में नई गतिविधि लॉन्च करने के लिए:
1. इंटेंट लॉन्च करते समय, गतिविधि के कॉन्टेक्स्ट का इस्तेमाल करें.
activity.startActivity(intent). इसके अलावा, 1. इंटेंट पर FLAG_ACTIVITY_NEW_TASK फ़्लैग सेट न करें.
ऐसा न करने पर, नई गतिविधि नए टास्क में शुरू होती है और बबल छोटा हो जाता है.
ध्यान रखें कि बबल, किसी खास बातचीत को दिखाता है. इसलिए, बबल में लॉन्च की गई गतिविधियां, उस बातचीत से जुड़ी होनी चाहिए. इसके अलावा, बबल में कोई गतिविधि लॉन्च करने से, बबल का टास्क स्टैक बढ़ जाता है. इससे, लोगों को नेविगेशन में परेशानी हो सकती है.
सबसे सही तरीके
- किसी सूचना को बबल के तौर पर सिर्फ़ तब भेजें, जब वह ज़रूरी हो. जैसे, अगर वह जारी बातचीत का हिस्सा है या अगर लोग, कॉन्टेंट के लिए बबल का अनुरोध करते हैं. बबल, स्क्रीन की जगह का इस्तेमाल करते हैं और अन्य ऐप्लिकेशन के कॉन्टेंट को कवर करते हैं.
- पक्का करें कि आपका बबल सूचना, सामान्य सूचना के तौर पर भी काम करे. जब लोग बबल की सुविधा बंद कर देते हैं, तो बबल वाली सूचना, सामान्य सूचना के तौर पर दिखती है.
- बबल वाली गतिविधि में
onBackPressedको ओवरराइड करते समय,super.onBackPressedको कॉल करें. ऐसा न करने पर, हो सकता है कि आपका बबल सही तरीके से काम न करे.
छोटा बबल, अपडेट किया गया मैसेज मिलने पर, एक बैज आइकॉन दिखाता है. इससे पता चलता है कि कोई मैसेज पढ़ा नहीं गया है. जब लोग, उससे जुड़े ऐप्लिकेशन में मैसेज खोलते हैं, तो यह तरीका अपनाएं:
- सूचना को छिपाने के लिए
BubbleMetadataको अपडेट करें. CallBubbleMetadata.Builder.setSuppressNotification()को कॉल करें. इससे बैज आइकॉन हट जाता है. इससे पता चलता है कि लोगों ने मैसेज के साथ इंटरैक्ट किया है. -
अपडेट होने पर, आवाज़ या वाइब्रेशन को छिपाने के लिए,
Notification.Builder.setOnlyAlertOnce()कोtrueपर सेट करें.BubbleMetadata
सैंपल ऐप्लिकेशन
SociaLite, बातचीत का एक सैंपल ऐप्लिकेशन है. इसमें बबल की सुविधा का इस्तेमाल किया जाता है. यह ऐप्लिकेशन, डेमो के तौर पर चैटबॉट का इस्तेमाल करता है. असल में, बबल की सुविधा का इस्तेमाल, लोगों के भेजे गए मैसेज के लिए करें.