Exibir notificações que dependem de tempo

Em algumas situações, seu app pode precisar chamar a atenção do usuário com urgência, por exemplo, para um alarme ativado ou uma chamada recebida. Em dispositivos com Android 9 (nível 28 da API) ou versões anteriores, é possível resolver isso iniciando uma atividade enquanto o app está em segundo plano. Este documento mostra como alcançar esse comportamento em dispositivos com o Android 10 (nível 29 da API) e versões mais recentes.

Adicionar a permissão POST_NOTIFICATIONS

No Android 13 (nível 33 da API) e versões mais recentes, declare a permissão POST_NOTIFICATIONS no arquivo AndroidManifest.xml:

<manifest ...>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
    <application ...>
        ...
    </application>
</manifest>

Depois de declarar a permissão, crie um canal de notificação.

Criar um canal de notificação

Crie um canal de notificação para mostrar notificações e permitir que os usuários gerenciem categorias de notificação nas configurações do sistema. Para saber mais sobre canais de notificação, consulte Criar e gerenciar canais de notificação.

Crie seus canais de notificação no método onCreate da classe Application:

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        val channel = NotificationChannel(
            CHANNEL_ID,
            "High priority notifications",
            NotificationManager.IMPORTANCE_HIGH
        )

        val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        notificationManager.createNotificationChannel(channel)
    }
}

Quando o usuário executa o app pela primeira vez, o sistema mostra o canal na tela Informações do app, como mostrado na Figura 1:

A tela de notificação &quot;Informações do app&quot; mostrando o canal criado.
Figura 1. Seção "Notificações" na tela Informações do app das configurações do sistema do app.

Gerenciar permissões de notificações

No Android 13 e versões mais recentes, peça permissões de notificação antes de mostrar notificações aos usuários.

O exemplo de código a seguir mostra como solicitar permissão de notificação em tempo de execução no Jetpack Compose:

val permissionLauncher = rememberLauncherForActivityResult(
    contract = ActivityResultContracts.RequestPermission(),
    onResult = { hasNotificationPermission = it }
)
// ...
Button(
    onClick = {
        if (!hasNotificationPermission) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
            }
        }
    },
) {
    Text(text = "Request permission")
}

Em dispositivos com o Android 13 e versões mais recentes, tocar no botão Solicitar permissão mostra a caixa de diálogo do sistema mostrada na Figura 2:

A caixa de diálogo do sistema que pede ao usuário para permitir notificações.
Figura 2. Caixa de diálogo do sistema para a solicitação de permissão de notificação.

Quando o usuário concede a permissão, o sistema atualiza a tela Informações do app, conforme mostrado na Figura 3:

A tela &quot;Informações do app&quot; mostrando as permissões de notificação concedidas.
Figura 3. Permissões de notificações concedidas.

Criar uma notificação de prioridade alta

Ao criar uma notificação de alta prioridade, forneça um título e um texto de mensagem claros. Atribua também um canal de alta importância e um nível de prioridade.

O exemplo de código a seguir configura e cria uma notificação de alta prioridade:

private fun showNotification() {
    val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

    val notificationBuilder =
        NotificationCompat.Builder(this, CHANNEL_ID)
            .setSmallIcon(R.drawable.baseline_auto_awesome_24)
            .setContentTitle("HIGH PRIORITY")
            .setContentText("Check this dog puppy video NOW!")
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setCategory(NotificationCompat.CATEGORY_RECOMMENDATION)

    notificationManager.notify(0, notificationBuilder.build())
}

Exibir a notificação para o usuário

Chamar a função showNotification aciona a notificação da seguinte maneira:

Button(onClick = { showNotification() }) {
    Text(text = "Show notification")
}

A Figura 4 mostra a notificação de alta prioridade exibida pelo sistema:

Uma notificação de alta prioridade exibida no dispositivo.
Figura 4. Uma notificação de alta prioridade.

Notificação em andamento

Ao exibir sua notificação para o usuário, ele pode confirmar ou dispensar o alerta ou lembrete do app. Por exemplo, o usuário pode aceitar ou rejeitar uma chamada telefônica recebida.

Se a notificação representar uma tarefa em segundo plano em andamento, como uma chamada telefônica ativa, associe a notificação a um serviço em primeiro plano. O snippet de código a seguir mostra como exibir uma notificação associada a um serviço em primeiro plano:

// Provide a unique integer for the "notificationId" of each notification.
startForeground(notificationId, notification)

Considere usar as atualizações em tempo real

As notificações contínuas sensíveis ao tempo podem se beneficiar de maior visibilidade. Considere promover notificações em andamento como Atualizações em tempo real para mostrar informações de status em todas as plataformas da interface do sistema.