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 aplicativos destinados a dispositivos No Android 9 (nível 28 da API) ou versões anteriores, você pode lidar com isso iniciando um 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) a 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>

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

Criar um canal de notificação

Crie um canal para exibir suas notificações corretamente e permita que o gerenciar as notificações nas configurações do app. Para mais informações sobre canais de notificação, consulte Criar e gerenciar notificações canais.

Crie seus canais de notificação na classe Application onCreate:

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 do seu 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" no app Tela de informações das configurações do sistema do app.

Gerenciar permissões de notificações

A partir do Android 13, solicite permissões de notificações antes de você mostra notificações 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 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 a notificação solicitação de permissão.

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

Uma imagem mostrando a tela de informações do app após a permissão de notificação concedida
Figura 3. Permissões de notificação 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ê mostra a 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 um uma chamada telefônica recebida.

Se a notificação for contínua, como uma ligação recebida, associar a notificação a um primeiro plano serviço. O snippet de código a seguir 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);