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 apps destinados a dispositivos com o Android 9 (API nível 28) 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 (API de nível 29) até o Android 13 (API de nível 33).

Adicionar a permissão POST_NOTIFICATIONS

A partir do Android 13, adicione a seguinte linha ao arquivo AndroidManifest.xml:

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

Depois disso, você pode criar um canal de notificação.

Criar um canal de notificação

Crie um canal de notificação para mostrar as notificações corretamente e permitir que o usuário gerencie as notificações nas configurações do app. 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:

Kotlin

class DACapp : 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 seu app pela primeira vez, ele vê algo como a figura 1 na tela do sistema Informações do app:

Uma imagem mostrando a tela de informações e notificações do app.
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.

A implementação mínima é assim:

Kotlin

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")
}

Se o dispositivo estiver executando o Android 13, tocar no botão Request permission vai acionar a caixa de diálogo mostrada na Figura 2:

Uma imagem mostrando a caixa de diálogo de solicitação de permissão
Figura 2. Caixa de diálogo do sistema para o pedido de permissão de notificação.

Se o usuário aceitar o pedido de permissão, a seção Informações do app vai ficar como na Figura 3:

Uma imagem mostrando a tela &quot;Informações do app&quot; depois que o pedido de permissão de notificação foi concedido
Figura 3. Permissões de notificação concedidas.

Criar uma notificação de prioridade alta

Ao criar a notificação, inclua um título e uma mensagem descritivos.

O exemplo a seguir contém uma notificação:

Kotlin

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(666, notificationBuilder.build())
}

Exibir a notificação para o usuário

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

Kotlin

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

A notificação neste exemplo é parecida com a da Figura 4:

Imagem mostrando uma notificação de alta prioridade
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 recusar uma chamada telefônica recebida.

Se sua notificação for contínua, como uma chamada telefônica recebida, 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:

Kotlin

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

Java

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