Es posible que tu app necesite llamar la atención del usuario rápidamente en ciertas situaciones, como cuando suena una alarma o entra una llamada. En dispositivos que ejecutan Android 9 (nivel de API 28) o versiones anteriores, puedes controlar esto iniciando una actividad mientras la app se ejecuta en segundo plano. En este documento, se muestra cómo lograr este comportamiento en dispositivos que ejecutan Android 10 (nivel de API 29) y versiones posteriores.
Agrega el permiso POST_NOTIFICATIONS
A partir de Android 13 (nivel de API 33), declara el permiso POST_NOTIFICATIONS en tu archivo AndroidManifest.xml:
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
Después de declarar el permiso, crea un canal de notificaciones.
Crea un canal de notificaciones
Crea un canal de notificaciones para mostrar notificaciones y permitir que los usuarios administren las categorías de notificaciones en la configuración del sistema. Para obtener más información sobre los canales de notificaciones, consulta Cómo crear y administrar canales de notificaciones.
Crea tus canales de notificaciones en el método onCreate de tu clase 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) } }
Cuando el usuario ejecuta la app por primera vez, el sistema muestra el canal en la pantalla Información de la app, como se muestra en la Figura 1:
Cómo administrar los permisos de notificaciones
A partir de Android 13, solicita permisos de notificación antes de mostrar notificaciones a los usuarios.
En el siguiente ejemplo de código, se muestra cómo solicitar permiso de notificación en el tiempo de ejecución en 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") }
En dispositivos que ejecutan Android 13 y versiones posteriores, al presionar el botón Solicitar permiso, se muestra el diálogo del sistema que se muestra en la Figura 2:
Cuando el usuario otorga el permiso, el sistema actualiza la pantalla Información de la app, como se muestra en la Figura 3:
Cómo crear una notificación de prioridad alta
Cuando crees una notificación de prioridad alta, proporciona un título y un texto del mensaje claros. También asigna un canal de alta importancia y un nivel de prioridad.
En el siguiente ejemplo de código, se configura y se compila una notificación de alta prioridad:
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()) }
Cómo mostrar la notificación al usuario
Llamar a la función showNotification activa la notificación de la siguiente manera:
Button(onClick = { showNotification() }) { Text(text = "Show notification") }
En la Figura 4, se muestra la notificación de prioridad alta que muestra el sistema:
Notificación en curso
Cuando se muestre la notificación al usuario, este puede aceptar o descartar la alerta o el recordatorio de tu app. Por ejemplo, el usuario puede aceptar o rechazar una llamada entrante.
Si tu notificación representa una tarea en segundo plano en curso, como una llamada telefónica activa, asóciala con un servicio en primer plano. En el siguiente fragmento de código, se muestra cómo mostrar una notificación asociada con un servicio en primer plano:
// Provide a unique integer for the "notificationId" of each notification. startForeground(notificationId, notification)
Considera usar las Novedades en tiempo real
Las notificaciones continuas urgentes pueden beneficiarse de una mayor visibilidad. Considera promocionar las notificaciones en curso como Actualizaciones en vivo para mostrar información de estado en las plataformas de la IU del sistema.