बबल्स की मदद से, लोग आसानी से बातचीत देख सकते हैं और उनमें हिस्सा ले सकते हैं.
बबल, सूचना सिस्टम में पहले से मौजूद होते हैं. ये बबल्स, ऐप्लिकेशन के अन्य कॉन्टेंट के ऊपर दिखते हैं और उपयोगकर्ता जहां भी जाता है उसके साथ-साथ दिखते हैं. उपयोगकर्ता, बबल्स को बड़ा करके ऐप्लिकेशन के कॉन्टेंट को देख सकते हैं और उससे इंटरैक्ट कर सकते हैं. साथ ही, जब वे इनका इस्तेमाल नहीं कर रहे होते हैं, तब इन्हें छोटा किया जा सकता है.
डिवाइस लॉक होने या हमेशा चालू रहने वाली डिसप्ले सुविधा चालू होने पर, बबल्स सामान्य सूचनाओं की तरह दिखते हैं.
बबल्स की सुविधा को बंद किया जा सकता है. जब कोई ऐप्लिकेशन पहली बार बबल दिखाता है, तो अनुमति देने से जुड़ा डायलॉग बॉक्स दो विकल्प दिखाता है:
- अपने ऐप्लिकेशन से मिलने वाले सभी बबल ब्लॉक करें. सूचनाएं ब्लॉक नहीं की जाती हैं, लेकिन वे कभी बबल के तौर पर नहीं दिखती हैं.
- अपने ऐप्लिकेशन से सभी बबल दिखाने की अनुमति दें.
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
को किए गए कॉल से जुड़ी है. इसमेंcategory
CATEGORY_CALL
है और इसमेंPerson
जोड़ा गया है. - सूचना भेजे जाने के दौरान, ऐप्लिकेशन फ़ोरग्राउंड में हो.
अगर इनमें से कोई भी शर्त पूरी नहीं होती है, तो बबल के बजाय सूचना दिखाई जाती है.
बबल से ऐक्टिविटी लॉन्च करना
जब कोई बबल नई गतिविधि शुरू करता है, तो नई गतिविधि या तो उसी टास्क और उसी बबल वाली विंडो में शुरू होगी या फ़ुलस्क्रीन में नए टास्क में शुरू होगी. ऐसा होने पर, उसे शुरू करने वाला बबल छोटा हो जाएगा.
बबल के तौर पर दिखने वाले टास्क में नई गतिविधि लॉन्च करने के लिए:
1. इंटेंट लॉन्च करते समय, गतिविधि के कॉन्टेक्स्ट का इस्तेमाल करें,
activity.startActivity(intent)
, और
1. इंटेंट पर FLAG_ACTIVITY_NEW_TASK
फ़्लैग सेट न करें.
ऐसा न होने पर, नई गतिविधि एक नए टास्क में शुरू होती है और बबल छोटा हो जाता है.
ध्यान रखें कि बबल किसी बातचीत को दिखाता है. इसलिए, बबल में लॉन्च की गई गतिविधियां, उस बातचीत से जुड़ी होनी चाहिए. इसके अलावा, बबल में कोई गतिविधि लॉन्च करने से, बबल का टास्क स्टैक बढ़ जाता है. इससे उपयोगकर्ता अनुभव खराब हो सकता है. खास तौर पर, नेविगेशन के मामले में.
सबसे सही तरीके
- किसी सूचना को सिर्फ़ तब बबल के तौर पर भेजें, जब वह ज़रूरी हो. जैसे, जब वह किसी मौजूदा बातचीत का हिस्सा हो या जब उपयोगकर्ता ने कॉन्टेंट के लिए बबल का अनुरोध किया हो. बबल, स्क्रीन पर ज़्यादा जगह घेरते हैं और दूसरे ऐप्लिकेशन के कॉन्टेंट को ढक देते हैं.
- पक्का करें कि बबल सूचना, सामान्य सूचना की तरह भी काम करती हो. जब उपयोगकर्ता बबल सुविधा बंद कर देता है, तब बबल सूचना को सामान्य सूचना के तौर पर दिखाया जाता है.
- बबल ऐक्टिविटी में
onBackPressed
को बदलने पर,super.onBackPressed
को कॉल करें. ऐसा न करने पर, हो सकता है कि आपका बबल ठीक से काम न करे.
जब किसी छोटे किए गए बबल में अपडेट किया गया मैसेज मिलता है, तो बबल में बैज आइकॉन दिखता है. इससे पता चलता है कि मैसेज को पढ़ा नहीं गया है. जब उपयोगकर्ता, मैसेज को उससे जुड़े ऐप्लिकेशन में खोलता है, तो यह तरीका अपनाएं:
- सूचना को बंद करने के लिए,
BubbleMetadata
को अपडेट करें.BubbleMetadata.Builder.setSuppressNotification()
पर कॉल करें. यह बैज आइकॉन को हटा देता है. इससे पता चलता है कि उपयोगकर्ता ने मैसेज के साथ इंटरैक्ट किया है. BubbleMetadata
अपडेट के साथ आने वाली आवाज़ या वाइब्रेशन को बंद करने के लिए,Notification.Builder.setOnlyAlertOnce()
कोtrue
पर सेट करें.
सैंपल ऐप्लिकेशन
SociaLite सैंपल ऐप्लिकेशन, बातचीत करने वाला एक ऐप्लिकेशन है. यह बबल्स का इस्तेमाल करता है. यह ऐप्लिकेशन, चैटबॉट का इस्तेमाल करता है. ऐसा सिर्फ़ डेमो दिखाने के लिए किया जाता है. असल दुनिया में इस्तेमाल होने वाले ऐप्लिकेशन में, इंसानों के मैसेज के लिए बबल्स का इस्तेमाल करें.