A partir do Android 8.0 (nível 26 da API), todas as notificações precisam ser atribuídas a um canal. Para cada canal, é possível definir o comportamento visual e auditivo que é aplicado a todas as notificações desse canal. Os usuários podem mudar essas configurações e decidir quais canais de notificação do seu app podem ser intrusivos ou visíveis.
Confira o vídeo a seguir para ter uma visão geral dos canais e de outros recursos de notificação no Android 8.0.
As configurações do usuário para canais de notificação estão disponíveis para cada app nas configurações do sistema, como mostrado na Figura 1.
Depois de criar um canal de notificação, não é possível mudar os comportamentos de notificação. O usuário tem controle total nesse momento. No entanto, ainda é possível mudar o nome e a descrição de um canal.
Crie um canal para cada tipo de notificação que você precisa enviar. Também é possível criar canais de notificação para refletir as escolhas feitas pelos usuários. Por exemplo, é possível configurar canais de notificação separados para cada grupo de conversa criado por um usuário em um app de mensagens.
Ao segmentar o Android 8.0 (nível 26 da API) ou versões mais recentes, é necessário implementar um ou
mais canais de notificação. Se o targetSdkVersion estiver definido como 25 ou menos,
quando o app for executado no Android 8.0 (nível 26 da API) ou mais recente, ele vai se comportar da mesma forma
que em dispositivos com o Android 7.1 (nível 25 da API) ou menos.
Criar um canal de notificação
Para criar um canal de notificação, siga estas etapas:
Crie um objeto
NotificationChannelcom um ID de canal exclusivo, um nome visível para o usuário e um nível de importância.Se quiser, especifique a descrição que o usuário vê nas configurações do sistema com
setDescription().Registre o canal de notificação transmitindo-o para
createNotificationChannel().
O exemplo a seguir mostra como criar e registrar um canal de notificação:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Create the NotificationChannel. val importance = NotificationManager.IMPORTANCE_DEFAULT val mChannel = NotificationChannel(CHANNEL_ID, name, importance) mChannel.description = descriptionText // Register the channel with the system. You can't change the importance // or other notification behaviors after this. val notificationManager = context.getSystemService(NotificationManager::class.java) notificationManager?.createNotificationChannel(mChannel) }
Recriar um canal de notificação com os valores originais não realiza nenhuma operação. Portanto, é seguro chamar esse código ao iniciar um app.
Por padrão, todas as notificações postadas em um determinado canal usam os comportamentos visuais e
auditivos definidos pelo nível de importância da classe
NotificationManagerCompat, como IMPORTANCE_DEFAULT ou
IMPORTANCE_HIGH. Consulte a próxima seção para mais informações sobre os
níveis de importância.
Se você quiser personalizar ainda mais os comportamentos de notificação padrão do canal,
chame métodos como enableLights(), setLightColor()
e setVibrationPattern() no NotificationChannel. Depois de criar o canal, não é possível mudar essas configurações, e o usuário tem o controle final sobre se esses comportamentos estão ativos.
Também é possível criar vários canais de notificação em uma única operação chamando createNotificationChannels().
Definir o nível de importância
A importância do canal afeta o nível de interrupção de todas as notificações postadas
nele. Especifique-o no construtor NotificationChannel usando um dos
cinco níveis de importância, que vão de IMPORTANCE_NONE(0) a
IMPORTANCE_HIGH(4).
Para oferecer suporte a dispositivos com o Android 7.1 (nível 25 da API) ou versões anteriores, você também precisa
chamar setPriority() para cada notificação, usando uma constante de prioridade da
classe NotificationCompat.
As constantes de importância (NotificationManager.IMPORTANCE_*) e prioridade
(NotificationCompat.PRIORITY_*) são mapeadas para as opções de importância visíveis ao usuário, conforme mostrado na tabela a seguir.
| Nível de importância visível para o usuário | Importância (Android 8.0 e posterior) | Prioridade (Android 7.1 e versões anteriores) |
|---|---|---|
| Urgente Emite um som e aparece como uma notificação de alerta. |
IMPORTANCE_HIGH |
PRIORITY_HIGH ou PRIORITY_MAX |
| Alta : emite um som. |
IMPORTANCE_DEFAULT |
PRIORITY_DEFAULT |
| Médio Não emite som. |
IMPORTANCE_LOW |
PRIORITY_LOW |
| Baixa Não emite som nem aparece na barra de status. |
IMPORTANCE_MIN |
PRIORITY_MIN |
| Nenhuma Não emite som e não aparece na barra de status ou na aba. |
IMPORTANCE_NONE |
N/A |
Todas as notificações, independentemente da importância, aparecem em locais da interface do sistema que não são interruptivos, como na gaveta de notificações e como um selo no ícone na tela de início, embora seja possível modificar a aparência do selo de notificação.
Depois de enviar o canal para o NotificationManager, não é possível mudar
o nível de importância. No entanto, o usuário pode mudar as preferências dos canais do seu
app a qualquer momento.
Para saber como escolher um nível de prioridade adequado, consulte "Níveis de prioridade" no Guia de design de notificações.
Ler configurações do canal de notificação
Os usuários podem modificar as configurações dos canais de notificação, incluindo comportamentos como vibração e som de alerta. Para saber as configurações que um usuário aplica aos seus canais de notificação, siga estas etapas:
Chame
getNotificationChannel()ougetNotificationChannels()para acessar o objetoNotificationChannel.Consulte as configurações de canais específicos, como
getVibrationPattern(),getSound()egetImportance().
Se você detectar uma configuração de canal que acredita que inibe o comportamento pretendido para seu app, sugira que o usuário a mude e forneça uma ação para abrir as configurações do canal, conforme mostrado na próxima seção.
Abrir as configurações do canal de notificação
Depois de criar um canal de notificação, não é possível mudar os comportamentos visuais e auditivos dele de forma programática. Somente o usuário pode mudar os comportamentos do canal nas configurações do sistema. Para oferecer aos usuários acesso rápido a essas configurações de notificação, adicione um item na interface de configurações do app que abra essas configurações do sistema.
É possível abrir as configurações do sistema para canais de notificação com uma
Intent que usa a ação
ACTION_CHANNEL_NOTIFICATION_SETTINGS.
Por exemplo, o exemplo de código a seguir mostra como redirecionar um usuário para as configurações de um canal de notificação:
val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply { putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName) putExtra(Settings.EXTRA_CHANNEL_ID, CHANNEL_ID) } Button(onClick = { context.startActivity(intent) }) { Text("Open Channel Settings") }
Observe que a intent requer dois extras que especificam o nome do pacote do app (também conhecido como ID do aplicativo) e o canal a ser editado.
Excluir um canal de notificação
Para excluir canais de notificação, chame
deleteNotificationChannel().
O exemplo de código a seguir demonstra como concluir esse processo:
val notificationManager = ContextCompat.getSystemService<NotificationManager>(context, NotificationManager::class.java) notificationManager?.deleteNotificationChannel(channelId)
Criar um grupo de canais de notificação
Se você quiser organizar ainda mais a aparência dos seus canais na interface de configurações, crie grupos de canais. Essa é uma boa ideia quando o app oferece suporte a várias contas de usuário, porque permite criar um grupo de canais de notificação para cada conta. Os grupos de canais ajudam os usuários a diferenciar e controlar vários canais de notificação com nomes idênticos.
Por exemplo, um app de rede social pode incluir suporte para contas pessoais e de trabalho. Nesse cenário, cada conta pode exigir vários canais de notificação com funções e nomes idênticos, como os seguintes:
Uma conta pessoal com dois canais:
Novos comentários
Recomendações de publicação
Uma conta empresarial com dois canais:
Novos comentários
Recomendações de publicação
Organizar os canais de notificação em grupos para cada conta permite que os usuários os diferenciem.
Cada grupo de canais de notificação requer um ID, que precisa ser exclusivo no seu pacote, além de um nome visível para o usuário. O snippet a seguir demonstra como criar um grupo de canais de notificação.
fun createNotificationChannelGroup(context: Context, groupId: String, groupName: String) { val notificationManager = ContextCompat.getSystemService(context, NotificationManager::class.java) notificationManager?.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName)) }
Depois de criar um novo grupo, você pode chamar
setGroup()
para associar um novo objeto NotificationChannel ao grupo.
Depois de enviar o canal ao gerenciador de notificações, não é possível mudar a associação entre o canal de notificação e o grupo.