Bubbles erleichtern es den Nutzern, Unterhaltungen zu sehen und daran teilzunehmen.
Infofelder sind im Benachrichtigungssystem integriert. Sie schweben über anderen Apps und den Nutzern folgen, egal wo sie sich befinden. Nutzer können Bubbles maximieren, und mit dem App-Inhalt interagieren. Sie können sie minimieren, wenn Sie sie verwenden.
Wenn das Gerät gesperrt oder das Always-on-Display aktiv ist, erscheinen Bubbles als wie gewohnt.
Infofelder können deaktiviert werden. Wenn eine App das erste Infofeld anzeigt, wird ein Berechtigungsdialogfeld bietet zwei Auswahlmöglichkeiten:
- Alle Bubbles in deiner App blockieren. Benachrichtigungen werden nicht blockiert, aber sie werden nie als Blasen angezeigt.
- Alle Bubbles von deiner App zulassen. Alle Benachrichtigungen gesendet mit
BubbleMetaData
werden als Bubbles angezeigt.
Die Bubble API
Infofelder werden mit der Notification API erstellt. Senden Sie Ihre Benachrichtigung daher als normal sein. Wenn Ihre Benachrichtigung als Bubble angezeigt werden soll, fügen Sie zusätzliche Daten hinzu hinzufügen.
Die maximierte Ansicht einer Blase wird auf der Grundlage einer von Ihnen ausgewählten Aktivität erstellt. Konfigurieren Sie die Aktivität so, dass sie korrekt als Bubble angezeigt wird. Die Aktivität muss vergrößerbar und embedded Wenn es fehlt eine dieser beiden Anforderungen erfüllt, wird stattdessen eine Benachrichtigung angezeigt.
Im folgenden Code sehen Sie, wie ein Infofeld implementiert wird:
<activity
android:name=".bubbles.BubbleActivity"
android:theme="@style/AppTheme.NoActionBar"
android:label="@string/title_activity_bubble"
android:allowEmbedded="true"
android:resizeableActivity="true"
/>
Wenn in Ihrer App mehrere Bubbles desselben Typs angezeigt werden, z. B. mehrere Chats
Unterhaltungen mit verschiedenen Kontakten führen können, muss die Aktivität
auf mehreren Instanzen. Auf Geräten mit Android 10 und niedriger
werden Benachrichtigungen nur dann als Bubbles angezeigt,
documentLaunchMode
bis
"always"
. Ab Android 11 müssen Sie
legen Sie diesen Wert fest, da das System automatisch
documentLaunchMode
in "always"
.
So senden Sie eine Bubble:
- Erstellen Sie eine Benachrichtigung, wenn Sie wie das normalerweise möglich ist.
BubbleMetadata.Builder(PendingIntent, Icon)
anrufen oderBubbleMetadata.Builder(String)
um einBubbleMetadata
-Objekt zu erstellen.- Verwenden Sie
setBubbleMetadata()
um der Benachrichtigung die Metadaten hinzuzufügen. - Bei einer Ausrichtung auf Android 11 oder höher muss das Infofeld Metadaten oder Benachrichtigungen auf eine Freigabeverknüpfung verweisen.
Diese Schritte werden im folgenden Beispiel gezeigt:
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);
Wenn deine App im Vordergrund ausgeführt wird, während eine Bubble gesendet wird, wird die Wichtigkeit ignoriert und Ihre Bubble wird immer angezeigt, es sei denn, der Nutzer blockiert sie oder Benachrichtigungen aus Ihrer App.
Maximierte Bubble erstellen
Sie können das Infofeld so konfigurieren, dass es automatisch maximiert angezeigt wird. Mi. empfehlen, diese Funktion nur zu verwenden, wenn der Nutzer eine Aktion ausführt, Ergebnisse in einer Blase, z. B. wenn Sie auf eine Schaltfläche tippen, um einen neuen Chat zu starten. In diesem Fall Es ist auch sinnvoll, die erste Benachrichtigung zu unterdrücken, die gesendet wird, wenn eine Bubble erstellt.
Es gibt Methoden, mit denen Sie Flags festlegen können, die diese Verhaltensweisen ermöglichen:
setAutoExpandBubble()
und
setSuppressNotification()
Das folgende Beispiel zeigt, wie Sie ein Infofeld so konfigurieren, dass es automatisch eingeblendet wird im maximierten Zustand:
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();
Lebenszyklus des Infofeld-Inhalts
Wenn ein Infofeld maximiert wird, durchläuft die Inhaltsaktivität den normalen Prozess. Lebenszyklus, was dazu führt, dass Anwendung, die zu einem Vordergrundprozess wird, falls dies noch nicht der Fall ist.
Wenn das Infofeld minimiert oder geschlossen wird, wird die Aktivität gelöscht. Dies könnte dass der Prozess im Cache gespeichert und später beendet wird, je nachdem, In der App werden andere Komponenten im Vordergrund ausgeführt.
Wann werden Bubbles angezeigt?
Um Unterbrechungen für den Nutzer zu vermeiden, werden Bubbles nur unter bestimmten Situation.
Wenn eine App auf Android 11 oder höher ausgerichtet ist, werden Benachrichtigungen als Blase angezeigt, es sei denn, dies entspricht der Konversation Anforderungen. Wenn eine App auf Android 10 oder niedriger wird die Benachrichtigung nur dann als Bubble angezeigt, eine oder mehrere der folgenden Bedingungen erfüllt sind:
- Für die Benachrichtigung werden
MessagingStyle
und hat einPerson
hinzugefügt. - Die Benachrichtigung stammt von einem Anruf an
Service.startForeground
, hat einecategory
vonCATEGORY_CALL
und hat einePerson
hinzugefügt. - Die App wird im Vordergrund ausgeführt, wenn die Benachrichtigung gesendet wird.
Wenn keine dieser Bedingungen erfüllt ist, wird die Benachrichtigung angezeigt. .
Aktivitäten aus Bubbles starten
Wenn eine neue Aktivität in einem Infofeld angezeigt wird, startet die neue Aktivität entweder innerhalb derselben Aufgabe und im selben Fenster mit Bubbles oder in einer neuen Aufgabe im Vollbildmodus, indem das Infofeld minimiert wird, mit dem es ausgelöst wurde.
So starten Sie eine neue Aktivität in derselben Aufgabe wie die Bubble:
1. Verwenden Sie beim Starten von Intents den Aktivitätskontext,
activity.startActivity(intent)
und
1. Legen Sie das Flag FLAG_ACTIVITY_NEW_TASK
nicht für den Intent fest.
Andernfalls wird die neue Aktivität in einer neuen Aufgabe gestartet und das Infofeld wird minimiert.
Denken Sie daran, dass eine Blase für eine bestimmte Unterhaltung steht. Aktivitäten die in der Bubble angezeigt werden, sollten sich auf diese Unterhaltung beziehen. Außerdem Wenn Sie eine Aktivität innerhalb der Blase starten, erhöht sich der Aufgabenstapel der Blase. und die User Experience potenziell verkomplizieren, Navigation.
Best Practices
- Benachrichtigungen nur als Bubble senden, wenn es wichtig ist, z. B. wenn sie oder wenn der Nutzer ausdrücklich eine Bubble anfordert, Inhalte. Bubbles nutzen den Platz auf dem Bildschirm und verdecken andere App-Inhalte.
- Achte darauf, dass die Bubble-Benachrichtigung als normale Benachrichtigung funktioniert. Wann? deaktiviert der Nutzer die Bubble, wird eine normale Benachrichtigung angezeigt. Benachrichtigung.
- Beim Überschreiben
super.onBackPressed
aufrufenonBackPressed
in der Bubble Aktivitäten. Andernfalls funktioniert die Blase möglicherweise nicht richtig.
Wenn eine minimierte Bubble eine aktualisierte Nachricht erhält, wird im Infofeld ein Badge angezeigt. um eine ungelesene Nachricht anzuzeigen. Wenn der Nutzer die Nachricht im verknüpfte App:
- Aktualisieren
BubbleMetadata
, um die Benachrichtigung zu unterdrücken. AnrufBubbleMetadata.Builder.setSuppressNotification()
Dadurch wird das Badge-Symbol entfernt, um anzuzeigen, dass der Nutzer mit der Nachricht interagiert hat. - Festlegen
Notification.Builder.setOnlyAlertOnce()
auftrue
, um den Ton oder die Vibration fürBubbleMetadata
zu unterdrücken aktualisieren.
Beispiel-App
Die Personen Beispiel-App ist eine Unterhaltungs-App, die Bubbles verwendet. Zu Demonstrationszwecken Diese App verwendet Chatbots. In realen Anwendungen können Sie Bubbles für Nachrichten verwenden, Menschen.