Создать группу уведомлений

Начиная с Android 7.0 (уровень API 24), вы можете отображать связанные уведомления в группе. Например, если ваше приложение отображает уведомления о полученных электронных письмах, поместите все уведомления о новых сообщениях электронной почты в одну группу, чтобы они свернулись вместе.

Для поддержки более старых версий добавьте сводное уведомление, которое будет отображаться отдельно и суммировать все отдельные уведомления. Часто это лучше всего делать с помощью уведомления в стиле «Входящие» .

Рис. 1. Свернутая (вверху) и развернутая (внизу) группа уведомлений.

Используйте группы уведомлений, если для вашего варианта использования выполняются все следующие условия:

  • Дочерние уведомления являются полными уведомлениями и могут отображаться индивидуально без необходимости групповой сводки.

  • Отображение дочерних уведомлений по отдельности имеет преимущество. Например:

    • Они являются действенными, с действиями, специфичными для каждого уведомления.

    • В каждом уведомлении содержится дополнительная информация, которую может видеть пользователь.

Если ваши уведомления не соответствуют предыдущим критериям, вместо этого рассмотрите возможность обновления существующего уведомления новой информацией или создания уведомления в виде сообщения , чтобы отображать несколько обновлений в одном разговоре.

Создайте группу и добавьте в нее уведомление

Чтобы создать группу уведомлений, определите уникальную строку идентификатора для группы. Затем для каждого уведомления, которое вы хотите добавить в группу, вызовите setGroup() , передав имя группы. Например:

Котлин

val GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL"

val newMessageNotification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_mail)
        .setContentTitle(emailObject.getSenderName())
        .setContentText(emailObject.getSubject())
        .setLargeIcon(emailObject.getSenderAvatar())
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build()

Ява

String GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL";

Notification newMessageNotification = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setSmallIcon(R.drawable.new_mail)
        .setContentTitle(emailObject.getSenderName())
        .setContentText(emailObject.getSubject())
        .setLargeIcon(emailObject.getSenderAvatar())
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build();

По умолчанию уведомления сортируются по времени их публикации, но вы можете изменить порядок, вызвав setSortKey() .

Если оповещения для группы уведомления должны обрабатываться другим уведомлением, вызовите setGroupAlertBehavior() Например, если вы хотите, чтобы шумела только сводка вашей группы, все дочерние элементы в группе должны иметь поведение группового оповещения GROUP_ALERT_SUMMARY . Другие параметры — GROUP_ALERT_ALL и GROUP_ALERT_CHILDREN .

Установить сводку группы

Сгруппированные уведомления должны иметь дополнительное уведомление, которое действует как сводка группы. Чтобы включить сгруппированные уведомления, необходимо настроить сводку группы. Эта сводка группы должна включать часть текста из каждого из других уведомлений в группе, чтобы помочь пользователю понять, что находится в группе. Отображение сводки группы зависит от версии Android:

  • В версиях Android ниже 7.0 (уровень API 24), которые не могут отображать вложенную группу уведомлений, система показывает только сводное уведомление вашей группы и скрывает все остальные. Пользователь может нажать на сводное уведомление группы, чтобы открыть ваше приложение.

  • В Android 7.0 и более поздних версиях система отображает сводное уведомление вашей группы как вложенную группу уведомлений, помеченную фрагментами текста из каждого сгруппированного уведомления. Он не отображает текст, который вы установили в сводном уведомлении группы. Пользователь может развернуть вложенную группу уведомлений, чтобы просмотреть отдельные уведомления в группе, как показано на рисунке 1.

Даже если в новых версиях Android не отображается созданный вами текст сводки группы, вам всегда придется вручную настраивать сводку, чтобы включить групповые уведомления . Поведение сводки группы может различаться на некоторых типах устройств, например носимых. Настройка расширенного контента в сводке группы помогает обеспечить наилучшее взаимодействие на всех устройствах и версиях.

Чтобы добавить сводку группы, выполните следующие действия:

  1. Создайте новое уведомление с описанием группы — часто лучше всего это сделать с помощью уведомления в стиле «Входящие» .

  2. Добавьте сводное уведомление в группу, вызвав setGroup() .

  3. Укажите, что его необходимо использовать в качестве сводки группы, вызвав setGroupSummary(true) .

В следующем коде показан пример создания сводки группы:

Котлин

// Use constant ID for notifications used as group summary.
val SUMMARY_ID = 0
val GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL"

val newMessageNotification1 = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject1.getSummary())
        .setContentText("You will not believe...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build()

val newMessageNotification2 = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject2.getSummary())
        .setContentText("Please join us to celebrate the...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build()

val summaryNotification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setContentTitle(emailObject.getSummary())
        // Set content text to support devices running API level < 24.
        .setContentText("Two new messages")
        .setSmallIcon(R.drawable.ic_notify_summary_status)
        // Build summary info into InboxStyle template.
        .setStyle(NotificationCompat.InboxStyle()
                .addLine("Alex Faarborg Check this out")
                .addLine("Jeff Chang Launch Party")
                .setBigContentTitle("2 new messages")
                .setSummaryText("janedoe@example.com"))
        // Specify which group this notification belongs to.
        .setGroup(GROUP_KEY_WORK_EMAIL)
        // Set this notification as the summary for the group.
        .setGroupSummary(true)
        .build()

NotificationManagerCompat.from(this).apply {
    notify(emailNotificationId1, newMessageNotification1)
    notify(emailNotificationId2, newMessageNotification2)
    notify(SUMMARY_ID, summaryNotification)
}

Ява

// Use constant ID for notifications used as group summary.
int SUMMARY_ID = 0;
String GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL";

Notification newMessageNotification1 =
    new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject1.getSummary())
        .setContentText("You will not believe...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build();

Notification newMessageNotification2 =
    new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notify_email_status)
        .setContentTitle(emailObject2.getSummary())
        .setContentText("Please join us to celebrate the...")
        .setGroup(GROUP_KEY_WORK_EMAIL)
        .build();

Notification summaryNotification =
    new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setContentTitle(emailObject.getSummary())
        // Set content text to support devices running API level < 24.
        .setContentText("Two new messages")
        .setSmallIcon(R.drawable.ic_notify_summary_status)
        // Build summary info into InboxStyle template.
        .setStyle(new NotificationCompat.InboxStyle()
                .addLine("Alex Faarborg  Check this out")
                .addLine("Jeff Chang    Launch Party")
                .setBigContentTitle("2 new messages")
                .setSummaryText("janedoe@example.com"))
        // Specify which group this notification belongs to.
        .setGroup(GROUP_KEY_WORK_EMAIL)
        // Set this notification as the summary for the group.
        .setGroupSummary(true)
        .build();

NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(emailNotificationId1, newMessageNotification1);
notificationManager.notify(emailNotificationId2, newMessageNotification2);
notificationManager.notify(SUMMARY_ID, summaryNotification);

Идентификатор сводного уведомления должен оставаться неизменным, чтобы он публиковался только один раз и чтобы вы могли обновить его позже, если сводная информация изменится. Последующие добавления в группу должны привести к обновлению существующего резюме.

Пример кода, использующего уведомления, см. в примере уведомлений Android .

Автоматическая группировка

В Android 7.0 (уровень API 24) и более поздних версиях, если ваше приложение отправляет четыре или более уведомлений и не указывает ключ группы или сводку группы, система может автоматически сгруппировать их вместе. Сгруппированные уведомления автоматически отображаются вместе со сводным уведомлением группы, помеченным фрагментами текста из некоторых сгруппированных уведомлений. Пользователь может развернуть это сводное уведомление, чтобы просмотреть каждое отдельное уведомление, как и в случае с уведомлениями, сгруппированными вручную.

Поведение автоматической группировки может различаться на некоторых типах устройств. Чтобы обеспечить наилучшую работу на всех устройствах и версиях, если вы знаете, что уведомления должны быть сгруппированы, укажите ключ группы и сводку группы, чтобы убедиться, что они сгруппированы.