Начиная с Android 7.0 (уровень API 24), связанные уведомления можно объединять в группы. Например, если ваше приложение показывает уведомления о полученных электронных письмах, поместите все уведомления о новых письмах в одну группу, чтобы они сворачивались вместе.
Чтобы поддерживать более ранние версии, добавьте сводное уведомление, которое будет появляться отдельно и содержать информацию обо всех отдельных уведомлениях. Обычно для этого используется уведомление в стиле входящих.
Если для вашего варианта использования выполняются все перечисленные ниже условия, используйте группы уведомлений:
Дочерние уведомления являются полными и могут отображаться по отдельности без сводки по группе.
Показ дочерних уведомлений по отдельности имеет свои преимущества. Пример:
Для каждого уведомления доступны определенные действия.
В каждом уведомлении содержится больше информации.
Если ваши уведомления не соответствуют указанным выше критериям, попробуйте обновить существующее уведомление, добавив в него новую информацию, или создать уведомление в стиле сообщения, чтобы показывать несколько обновлений в одном диалоге.
Как создать группу и добавить в нее уведомление
Чтобы создать группу уведомлений, задайте для нее уникальный строковый идентификатор.
Затем для каждого уведомления, которое вы хотите добавить в группу, вызовите 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()
По умолчанию уведомления сортируются по времени публикации, но вы можете изменить порядок, вызвав функцию setSortKey.
Если оповещения для группы уведомлений должны обрабатываться другим уведомлением, вызовите setGroupAlertBehavior. Например, если вы хотите, чтобы звуковой сигнал воспроизводился только для сводки группы, всем дочерним уведомлениям в группе должно быть назначено поведение GROUP_ALERT_SUMMARY. Другие варианты: GROUP_ALERT_ALL и GROUP_ALERT_CHILDREN.
Как настроить сводку группы
У сгруппированных уведомлений должно быть дополнительное уведомление, которое выступает в качестве сводки группы. Чтобы включить группировку уведомлений, необходимо задать краткое описание группы. В сводке должны быть фрагменты текста из каждого уведомления, чтобы пользователь мог понять, о чем идет речь. Способ отображения сводки по группе зависит от версии Android:
В версиях Android ниже 7.0 (уровень API 24) вложенные группы уведомлений не поддерживаются, поэтому система показывает только сводное уведомление группы, а остальные скрывает. Пользователь может нажать на уведомление с кратким описанием группы, чтобы открыть ваше приложение.
В Android 7.0 и более поздних версиях сводка уведомлений группы показывается как вложенная группа уведомлений, помеченная фрагментами текста из каждого сгруппированного уведомления. Текст, заданный для сводного уведомления группы, не показывается. Пользователь может развернуть вложенную группу уведомлений, чтобы увидеть отдельные уведомления в группе, как показано на рисунке 1.
Даже если в более поздних версиях Android не показывается текст сводки, который вы создали, вам нужно вручную задать сводку, чтобы включить группировку уведомлений. Поведение сводки по группе может отличаться на некоторых типах устройств, например на носимых устройствах. Если в сводке группы используется форматирование, это позволяет обеспечить оптимальное качество отображения на всех устройствах и во всех версиях.
Чтобы добавить сводку по группе, выполните следующие действия:
Создайте новое уведомление с описанием группы. Лучше всего для этого подходит уведомление в стиле папки "Входящие".
Добавьте сводное уведомление в группу, вызвав
setGroup.Укажите, что его нужно использовать в качестве сводки группы, вызвав метод
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) }
Идентификатор уведомления должен оставаться прежним, чтобы оно показывалось только один раз и чтобы его можно было обновить, если изменится информация. При последующих добавлениях в группу сводка должна обновляться.
Автоматическая группировка
Если в приложении, работающем на устройстве с Android 7.0 (уровень API 24) или более поздней версии, не указан ключ или сводка группы, система может автоматически объединить уведомления. Автоматически сгруппированные уведомления появляются вместе со сводным уведомлением, содержащим фрагменты текста из некоторых сгруппированных уведомлений. Пользователь может развернуть сводное уведомление, чтобы увидеть каждое отдельное уведомление, как и в случае с уведомлениями, сгруппированными вручную.
На некоторых типах устройств автоматическая группировка может работать иначе. Чтобы обеспечить наилучшее взаимодействие на всех устройствах и версиях, если вы знаете, что уведомления должны быть сгруппированы, укажите ключ группы и сводку группы, чтобы убедиться, что они сгруппированы.