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 chamada recebida. Em apps destinados a dispositivos com o Android 9 (nível 28 da API) ou versões anteriores, é possível processar 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) ao Android 13 (nível 33 da API).

Adicionar a permissão POST_NOTES

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

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

Em seguida, crie um canal de notificação.

Criar um canal de notificação

Crie um canal para mostrar as notificações corretamente e permitir que o usuário as gerencie 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 o app pela primeira vez, ele vê algo como a Figura 1 na tela do sistema Informações do app:

Uma imagem mostrando a tela &quot;Informações do app&quot;, &quot;Notificação&quot; do seu app.
Figura 1. Seção "Notificações" na tela Informações do app nas configurações do sistema.

Gerenciar permissões de notificações

A partir do Android 13, solicite permissões de notificações antes de mostrá-las aos usuários.

A implementação mínima é semelhante a esta:

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 acionará a caixa de diálogo mostrada na Figura 2:

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

Se o usuário aceitar a solicitação de permissão, a seção Informações do app será parecida com a Figura 3:

Uma imagem mostrando a tela de informações do app após conceder uma solicitação de permissão de notificação
Figura 3. Permissões de notificações concedidas.

Criar uma notificação de prioridade alta

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

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 é semelhante à Figura 4:

Uma imagem mostrando uma notificação de alta prioridade
Figura 4. Uma notificação de alta prioridade.

Notificação em andamento

Quando você exibe sua notificação ao usuário, ele pode confirmar ou dispensar o alerta ou lembrete do seu app. Por exemplo, o usuário pode aceitar ou rejeitar uma chamada telefônica recebida.

Se sua notificação for contínua, como uma chamada telefônica recebida, associe-a a um serviço em primeiro plano. O snippet de código abaixo mostra como mostrar 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);