Bubbles erleichtern es 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 ist oder das Always-on-Display aktiv ist, werden Blasen wie bei normalen Benachrichtigungen angezeigt.
Bubbles sind eine optionale Funktion. Wenn eine App das erste Infofeld anzeigt, wird ein Berechtigungsdialogfeld bietet zwei Auswahlmöglichkeiten:
- Blockieren Sie alle Bubbles von Ihrer App. Benachrichtigungen werden nicht blockiert, aber sie werden nie als Bubbles 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 Sie möchten, dass Ihre Benachrichtigung als Bubble angezeigt wird, hängen Sie zusätzliche Daten an.
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 wird gezeigt, wie eine Blase 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 Ihre App mehrere Bubbles desselben Typs anzeigt, z. B. mehrere Chatunterhaltungen mit verschiedenen Kontakten, muss die Aktivität mehrere Instanzen starten können. Auf Geräten mit Android 10 und niedriger werden Benachrichtigungen nur dann als Bubbles angezeigt, wenn Sie documentLaunchMode
explizit auf "always"
festlegen. 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 wie gewohnt eine Benachrichtigung.
- Rufen Sie
BubbleMetadata.Builder(PendingIntent, Icon)
oderBubbleMetadata.Builder(String)
auf, um einBubbleMetadata
-Objekt zu erstellen. - Verwenden Sie
setBubbleMetadata()
, um der Benachrichtigung die Metadaten hinzuzufügen. - Wenn Sie Ihre Anzeigen auf Android 11 oder höher ausrichten, müssen die Bubble-Metadaten oder die Benachrichtigung auf einen Freigabe-Shortcut verweisen.
- Passe deine App so an, dass Benachrichtigungen, die als Bubbles angezeigt werden, nicht deaktiviert werden.
Um zu prüfen, ob die Benachrichtigungsaktivität als Bubble gestartet wurde, rufen Sie
Activity#isLaunchedFromBubble()
Wenn Sie eine Benachrichtigung schließen, wird die Bubble vom Display entfernt. Öffnen einer Bubble blendet automatisch die zugehörige Benachrichtigung aus.
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.
Erweitertes Infofeld erstellen
Sie können das Infofeld so konfigurieren, dass es automatisch maximiert angezeigt wird. Wir empfehlen, diese Funktion nur zu verwenden, wenn der Nutzer eine Aktion ausführt, die zu einer Bubble führt, z. B. wenn er auf eine Schaltfläche tippt, 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 eine Blase so konfiguriert wird, dass sie automatisch maximiert angezeigt wird:
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 eine Blase maximiert wird, durchläuft die Inhaltsaktivität den normalen Prozesslebenszyklus. Dadurch wird die Anwendung zu einem Prozess im Vordergrund, 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 Nutzer zu minimieren, werden Bubbles nur unter bestimmten Umständen angezeigt.
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 ausgerichtet ist, wird die Benachrichtigung nur dann als Bubble angezeigt, wenn mindestens eine der folgenden Bedingungen erfüllt ist:
- In der Benachrichtigung wird
MessagingStyle
verwendet undPerson
hinzugefügt. - Die Benachrichtigung stammt von einem Anruf an
Service.startForeground
, hat einecategory
vonCATEGORY_CALL
und hat einePerson
hinzugefügt. - Die App ist im Vordergrund, wenn die Benachrichtigung gesendet wird.
Wenn keine dieser Bedingungen erfüllt ist, wird die Benachrichtigung anstelle einer Blase angezeigt.
Aktivitäten über 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, mit dem es geöffnet wurde, minimiert wird.
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 die Absicht 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 erhöht das Starten einer Aktivität innerhalb der Blase den Aufgabenstapel der Blase und könnte die Nutzerfreundlichkeit beeinträchtigen, insbesondere in Bezug auf die Navigation.
Best Practices
- Benachrichtigungen nur als Bubble senden, wenn es wichtig ist, z. B. wenn sie oder wenn der Nutzer ausdrücklich eine Bubble für Inhalte. Bubbles belegen Platz auf dem Display und verdecken andere App-Inhalte.
- Achte darauf, dass die Bubble-Benachrichtigung wie eine normale Benachrichtigung funktioniert. Wenn der Nutzer die Bubble deaktiviert, wird eine Bubble-Benachrichtigung als normale Benachrichtigung angezeigt.
- Rufen Sie
super.onBackPressed
auf, wenn SieonBackPressed
in der Bubble-Aktivität überschreiben. Andernfalls funktioniert die Bubble möglicherweise nicht richtig.
Wenn für eine minimierte Bubble eine aktualisierte Nachricht eingeht, wird in der Bubble ein Symbol angezeigt, das auf eine ungelesene Nachricht hinweist. 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 werden in dieser App Chatbots verwendet. In realen Anwendungen können Sie Bubbles für Nachrichten verwenden, Menschen.