Criar um grupo de notificações

A partir do Android 7.0 (API de nível 24), é possível exibir notificações relacionadas no um grupo. Por exemplo, se o app mostrar notificações para e-mails recebidos, coloque todas as notificações de novas mensagens de e-mail no mesmo grupo para que sejam recolhidas juntas.

Para oferecer suporte a versões mais antigas, adicione uma notificação de resumo que aparece sozinha para resumir todas as notificações separadas. Geralmente, a melhor opção para fazer isso é notificação no estilo da caixa de entrada.

Figura 1. Uma imagem recolhida (superior) e expandida (inferior). grupo de notificações.

Use grupos de notificações se todas as condições a seguir forem verdadeiras caso:

  • As notificações filhas são notificações completas e podem ser mostradas individualmente sem a 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 para o usuário ver.

Se as notificações não atenderem aos critérios anteriores, considere atualizar uma notificação existente com novas informações ou criar um tipo de mensagem notificação a ser exibida 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 exclusivo para o grupo. Em seguida, para cada notificação que você quer incluir no grupo, chame setGroup(), passando 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 a data de postagem, mas você pode alterar a ordem chamando setSortKey()

Se os alertas de um grupo de notificações precisarem ser gerenciados por uma notificação, chamada setGroupAlertBehavior() Por exemplo, se você quiser que apenas o resumo do seu grupo faça barulho, todas as crianças do grupo precisam ter o comportamento de alerta de grupo GROUP_ALERT_SUMMARY As outras opções são GROUP_ALERT_ALL e GROUP_ALERT_CHILDREN

Definir um resumo do grupo

As notificações agrupadas precisam ter uma notificação extra que atue como o grupo resumo. Para ativar as notificações agrupadas, defina um resumo do grupo. Isso o resumo do grupo precisa incluir um texto de cada uma das outras notificações no grupo para ajudar o usuário a entender o que está no grupo. Como o grupo que é exibido depende da versão do Android:

  • Em versões do Android anteriores à 7.0 (nível 24 da API), que não podem mostrar grupo de notificações, o sistema mostrará apenas o resumo do grupo e oculta as demais. O usuário pode tocar no resumo do grupo. para abrir o app.

  • No Android 7.0 e versões posteriores, o sistema mostra a notificação de resumo do grupo como um grupo aninhado de notificações, identificadas com snippets de texto de cada notificação agrupada. Ele não mostra o texto que você definiu no grupo com uma notificação resumida. O usuário pode expandir o grupo aninhado de notificações para conferir as notificações individuais do grupo, como mostrado na Figura 1.

Mesmo que as versões mais recentes do Android não mostrem o texto do resumo do grupo que você do projeto, você sempre precisa definir manualmente um resumo para habilitar a criação notificações. O comportamento do resumo do grupo pode variar em alguns dispositivos como wearables. Definir conteúdo avançado no resumo do grupo ajuda para oferecer a melhor experiência em todos os dispositivos e versões.

Para adicionar um resumo do grupo, faça o seguinte:

  1. Crie uma nova notificação com uma descrição do grupo. Geralmente, a melhor opção deixar de lado o tipo de caixa de entrada notificação.

  2. Adicione a notificação de resumo ao grupo chamando setGroup().

  3. Especifique que ele precisa ser usado como o resumo do grupo chamando setGroupSummary(true)

O código a seguir mostra um exemplo de como criar um resumo do grupo:

Kotlin

// 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)
}

Java

// 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);

O ID de notificação de resumo deve permanecer o mesmo para ser postada apenas uma vez e para que você possa atualizá-lo mais tarde se as informações do resumo mudarem. Depois adições ao grupo devem resultar na atualização do resumo existente.

Para ver um exemplo de código que usa notificações, consulte as Notificações do Android Exemplo ,

Agrupamento automático

No Android 7.0 (nível 24 da API) e versões mais recentes, se o app enviar quatro ou mais notificações e não especificar uma chave ou um resumo do grupo, o sistema poderá agrupá-las automaticamente. As notificações agrupadas aparecem automaticamente com uma notificação de resumo do grupo identificada com trechos de texto de alguns as notificações agrupadas. O usuário pode expandir essa notificação de resumo para ver cada notificação individual, como acontece com as notificações agrupadas manualmente.

O comportamento do agrupamento automático pode variar em alguns tipos de dispositivo. Para oferecer a melhor em todos os dispositivos e versões, se você sabe que as notificações devem ser agrupados, especifique uma chave e um resumo para garantir que eles estejam agrupados.