A partir do Android 8.0 (API de nível 26), todas as notificações devem ser atribuídas a um canal. Para cada canal, você pode definir o comportamento visual e auditivo que é aplicada a todas as notificações desse canal. Os usuários podem mudar essas configurações e decidir quais canais de notificação do app podem ser invasivos ou visíveis.
Assista o vídeo a seguir para ter uma visão geral dos canais e outras notificações recursos no Android 8.0.
As configurações do usuário para canais de notificação estão disponíveis para cada aplicativo no configurações do sistema, como mostrado na Figura 1.
Depois de criar um canal de notificação, não é possível alterar a notificação o comportamento dos modelos. Nesse ponto, o usuário tem controle total. No entanto, ainda será possível alterar o nome e a descrição de um canal;
Crie um canal para cada tipo de notificação que você precisa enviar. Você também pode criar canais de notificação para refletir as escolhas feitas pelos usuários. Por exemplo, pode configurar canais de notificação separados para cada grupo de conversa criado pelo 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 uma ou
mais canais de notificação. Se a targetSdkVersion
estiver definida como 25 ou menor,
quando o app é executado no Android 8.0 (nível 26 da API) ou mais recente, ele se comporta da mesma forma.
em dispositivos com o Android 7.1 (nível 25 da API) ou versões anteriores.
Criar um canal de notificação
Para criar um canal de notificação, siga estas etapas:
Construir um Objeto
NotificationChannel
com um ID do canal exclusivo, nome visível para o usuário e nível de importância.Se quiser, especifique a descrição que aparece para o usuário nas configurações do sistema com
setDescription()
Registre o canal de notificação passando-o para
createNotificationChannel()
O exemplo abaixo mostra como criar e registrar um canal de notificação:
Kotlin
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Create the NotificationChannel. val name = getString(R.string.channel_name) val descriptionText = getString(R.string.channel_description) 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 = getSystemService(NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannel(mChannel) }
Java
private void createNotificationChannel() { // Create the NotificationChannel, but only on API 26+ because // the NotificationChannel class is not in the Support Library. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { CharSequence name = getString(R.string.channel_name); String description = getString(R.string.channel_description); int importance = NotificationManager.IMPORTANCE_DEFAULT; NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance); channel.setDescription(description); // Register the channel with the system. You can't change the importance // or other notification behaviors after this. NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel); } }
A recriação de um canal de notificação já existente com os valores originais dele realiza "não" operação. Portanto, é seguro chamar esse código ao iniciar um aplicativo.
Por padrão, todas as notificações postadas em um determinado canal usam os recursos visuais e
comportamentos auditivos definidos pelo nível de importância da
NotificationManagerCompat
classe, como
IMPORTANCE_DEFAULT
ou
IMPORTANCE_HIGH
.
Consulte a próxima seção para saber mais sobre
níveis de importância.
Se você quiser personalizar ainda mais os comportamentos de notificação padrão do seu canal,
você pode chamar métodos como
enableLights()
,
setLightColor()
,
e
setVibrationPattern()
no dia NotificationChannel
. Depois de criar o canal, você
não pode alterar essas configurações, e o usuário tem controle final sobre se elas
comportamentos individuais estão ativos.
Também é possível criar vários canais de notificação em uma única operação
chamar
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
canal. Especifique-a no construtor NotificationChannel
, usando um dos
cinco níveis de importância, que variam de
IMPORTANCE_NONE(0)
para
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
ligar
setPriority()
para cada notificação, usando uma constante de prioridade da
NotificationCompat
.
A importância (NotificationManager.IMPORTANCE_*
) e a prioridade
As constantes (NotificationCompat.PRIORITY_*
) são mapeadas para a importância visível para o 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 e não aparece na barra de status. |
IMPORTANCE_MIN |
PRIORITY_MIN |
Nenhum Não emite som e não aparece na barra de status nem na aba. |
IMPORTANCE_NONE |
N/A |
Todas as notificações, independentemente da importância, aparecem no sistema sem interrupções Locais da IU, como na gaveta de notificações e um selo no ícone na tela de início, embora seja possível modificar a aparência do ícone de notificação.
Depois de enviar o canal para
NotificationManager
, você
não podem alterar o nível de importância. No entanto, o usuário pode alterar
preferências para os canais do seu app a qualquer momento.
Para obter informações sobre como escolher um nível adequado de prioridade, consulte "Prioridade níveis" no Guia de criação 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 quais configurações um usuário se aplica aos seus canais de notificação, siga estas etapas:
Acesse o objeto
NotificationChannel
chamandogetNotificationChannel()
ougetNotificationChannels()
Consulte configurações específicas do canal, como
getVibrationPattern()
,getSound()
egetImportance()
.
Caso você acredite que uma configuração do canal inibe o comportamento pretendido para seu app, você pode sugerir que o usuário o modifique e fornecer uma ação para abra 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 alterar a notificação comportamentos visuais e auditivos do canal de maneira programática. Somente o usuário pode mudar o comportamento do canal nas configurações do sistema. Para oferecer aos usuários acesso fácil a essas configurações de notificação, adicione um item à IU de configurações que abre essas configurações do sistema.
Você pode abrir as configurações do sistema para canais de notificação com um
Intent
que usa o
ACTION_CHANNEL_NOTIFICATION_SETTINGS
à ação.
Por exemplo, o exemplo de código a seguir mostra como redirecionar um usuário para o configurações para um canal de notificação:
Kotlin
val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply { putExtra(Settings.EXTRA_APP_PACKAGE, packageName) putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId()) } startActivity(intent)
Java
Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS); intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName()); intent.putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId()); startActivity(intent);
A intent exige dois extras que especificam o nome do pacote do app. (também conhecido como o ID do aplicativo) e o canal a ser editado.
Excluir um canal de notificação
Para excluir canais de notificação, chame
deleteNotificationChannel()
O código de exemplo a seguir demonstra como concluir esse processo:
Kotlin
// The id of the channel. val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val id: String = "my_channel_01" notificationManager.deleteNotificationChannel(id)
Java
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // The id of the channel. String id = "my_channel_01"; notificationManager.deleteNotificationChannel(id);
Criar um grupo de canais de notificação
Para organizar melhor a aparência dos seus canais na interface de configurações, crie grupos de canais. É uma boa ideia quando seu app oferece suporte várias contas de usuário, como perfis de trabalho, porque permite criar um grupo de canais de notificação para cada conta. Dessa forma, os usuários podem identificar facilmente e controlar vários canais de notificação com nomes idênticos.
Por exemplo, um app de rede social pode incluir suporte para serviços pessoais e contas de serviço. Nesse caso, cada conta pode exigir diversas notificações canais 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 diferenciá-los entre eles.
Cada grupo de canais de notificação exige um ID, que precisa ser exclusivo no seu bem como um nome visível para o usuário. O snippet a seguir demonstra como para criar um grupo de canais de notificação.
Kotlin
// The id of the group. val groupId = "my_group_01" // The user-visible name of the group. val groupName = getString(R.string.group_name) val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))
Java
// The id of the group. String groupId = "my_group_01"; // The user-visible name of the group. CharSequence groupName = getString(R.string.group_name); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.createNotificationChannelGroup(new 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 alterar o associação entre canal de notificação e grupo.