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:
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:
Quando o usuário concede a permissão, o sistema atualiza a tela Informações do app, conforme mostrado na Figura 3:
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:
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.