Mit Bubbles können Nutzer an Unterhaltungen teilnehmen

Bubbles erleichtern es Nutzern, Unterhaltungen zu sehen und daran teilzunehmen.

Abbildung 1. Eine Chatbubble.

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:

  1. Erstellen Sie wie gewohnt eine Benachrichtigung.
  2. Rufen Sie BubbleMetadata.Builder(PendingIntent, Icon) oder BubbleMetadata.Builder(String) auf, um ein BubbleMetadata-Objekt zu erstellen.
  3. Verwenden Sie setBubbleMetadata(), um der Benachrichtigung die Metadaten hinzuzufügen.
  4. Wenn Sie Ihre Anzeigen auf Android 11 oder höher ausrichten, müssen die Bubble-Metadaten oder die Benachrichtigung auf einen Freigabe-Shortcut verweisen.
  5. 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:

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 Sie onBackPressed 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:

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.