Criar e gerenciar canais de notificação

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.

Figura 1. Configurações de notificação do app Relógio e um dos canais dele.

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:

  1. Construir um Objeto NotificationChannel com um ID do canal exclusivo, nome visível para o usuário e nível de importância.

  2. Se quiser, especifique a descrição que aparece para o usuário nas configurações do sistema com setDescription()

  3. 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:

  1. Acesse o objeto NotificationChannel chamando getNotificationChannel() ou getNotificationChannels()

  2. Consulte configurações específicas do canal, como getVibrationPattern(), getSound() e getImportance().

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.

Figura 2. Configurações do canal de notificação com grupos para contas pessoais e de trabalho.

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.