Cómo crear notificaciones sujetas a limitaciones temporales

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:

La pantalla de notificación de información de la app que muestra el canal creado.
Figura 1: Sección Notificaciones en la pantalla Información de la app de la configuración del sistema de la app

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:

Es el diálogo del sistema que le solicita al usuario que permita las notificaciones.
Figura 2: Diálogo del sistema para la solicitud de permiso de notificaciones.

Cuando el usuario otorga el permiso, el sistema actualiza la pantalla Información de la app, como se muestra en la Figura 3:

La pantalla de información de la app que muestra los permisos de notificación otorgados.
Figura 3: Se otorgaron los permisos de notificaciones.

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:

Es una notificación de prioridad alta que se muestra en el dispositivo.
Figura 4: Es una notificación de prioridad alta.

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.