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:
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:
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. 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:
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.