A partir do Android 7.0 (API de nível 24), você pode exibir notificações relacionadas em um grupo (conhecidas anteriormente como notificações "agrupadas"). Por exemplo, caso seu app mostre notificações para e-mails recebidos, você precisa colocar todas as notificações no mesmo grupo, para que elas possam ser recolhidas juntas.
Para oferecer compatibilidade com versões mais antigas, adicione também uma notificação de resumo que aparece sozinha para resumir todas as notificações separadas. Geralmente, a melhor opção para fazer isso é usar a notificação no estilo de caixa de entrada.
Figura 1. Um grupo de notificações recolhido e expandido.
Use grupos de notificações apenas quando todas as condições a seguir forem verdadeiras para seu caso de uso:
- As notificações filhas são completas e podem ser exibidas individualmente sem necessidade de um resumo do grupo.
- A exibição individual de notificações filhas pode ser vantajosa. Por exemplo:
- Elas são acionáveis, sem ações específicas para cada notificação.
- Há mais informações em cada notificação que o usuário precisa ver.
Se suas notificações não atenderem aos critérios acima, atualize uma notificação existente com novas informações ou crie uma notificação no estilo de mensagem para mostrar várias atualizações na mesma conversa.
Criar um grupo e adicionar uma notificação
Para criar um grupo de notificações, defina uma string de identificador único para o grupo. Em seguida, para cada notificação que você quiser inserir no grupo, bastará chamar setGroup()
, transmitindo o nome do grupo. Exemplo:
Kotlin
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()
Java
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();
Por padrão, as notificações são classificadas de acordo com o momento da postagem, mas você pode mudar essa ordem chamando setSortKey()
.
Se os alertas de um grupo de notificações precisarem ser processados por outra notificação, chame setGroupAlertBehavior()
. Por exemplo, se você quiser que apenas o resumo do grupo seja ouvido, todas as notificações filhas do grupo precisarão ter o comportamento de alerta GROUP_ALERT_SUMMARY
.
As outras opções são GROUP_ALERT_ALL
e GROUP_ALERT_CHILDREN
.
Definir um resumo do grupo
No Android 7.0 (API nível 24) e posterior, o sistema cria automaticamente um resumo para o grupo usando trechos de texto de cada notificação. O usuário pode expandir para ver cada notificação separada, conforme mostrado na figura 1. Para oferecer compatibilidade com versões mais antigas, que não mostram um grupo aninhado de notificações, é preciso criar uma notificação extra que atue como resumo. Ela é exibida como a única notificação, e o sistema oculta todas as outras. Portanto, esse resumo precisa incluir um trecho de todas as outras notificações, em que o usuário pode tocar para abrir o app.
Para adicionar um resumo do grupo, faça o seguinte:
- Crie uma notificação com a descrição do grupo. Geralmente, a melhor opção para fazer isso é usar a notificação no estilo de caixa de entrada.
- Adicione a notificação de resumo ao grupo chamando
setGroup()
. - Especifique que ele precisa ser usado como o resumo do grupo chamando
setGroupSummary(true)
.
Exemplo:
Kotlin
//use constant ID for notification 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) }
Java
//use constant ID for notification 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);
O código da notificação de resumo precisa permanecer o mesmo para ser publicado apenas uma vez. Portanto, você poderá atualizá-lo mais tarde se as informações do resumo mudarem (adições posteriores ao grupo resultarão na atualização do resumo existente).
Para ver o exemplo de código que usa notificações, consulte o Exemplo de notificações do Android (em inglês).