Exibir notificações que dependem de tempo

Seu app pode precisar chamar a atenção do usuário com urgência em determinadas situações, como um alarme em andamento ou uma ligação recebida. Em dispositivos com o Android 9 (nível 28 da API) ou versões anteriores, é possível lidar com 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

A partir do Android 13 (nível 33 da API), 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 as 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 de informações do app 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, solicite permissões de notificação antes de mostrar notificações aos usuários.

O exemplo de código abaixo mostra como solicitar permissão de notificações durante a 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ções.

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. Além disso, atribua um canal de alta importância e um nível de prioridade.

O exemplo de código abaixo 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

Quando você mostra a notificação ao usuário, ele pode confirmar ou dispensar o alerta ou lembrete do app. Por exemplo, o usuário pode aceitar ou rejeitar uma ligação recebida.

Se a notificação representar uma tarefa em segundo plano em andamento, como uma chamada telefônica ativa, associe-a a um serviço em primeiro plano. O snippet de código abaixo 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 em andamento urgentes podem se beneficiar de uma 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.