Cómo crear notificaciones sujetas a limitaciones temporales

Es posible que tu app necesite llamar la atención del usuario con urgencia en ciertas situaciones, como cuando suena una alarma o entra una llamada. En las apps que se orientan a dispositivos que ejecutan Android 9 (nivel de API 28) o versiones anteriores, puedes controlar esto iniciando una actividad mientras la app está en segundo plano. En este documento, se muestra cómo lograr este comportamiento en dispositivos que ejecutan Android 10 (nivel de API 29) a Android 13 (nivel de API 33).

Agrega el permiso POST_NOTIFICACIONES

A partir de Android 13, agrega la siguiente línea a tu archivo AndroidManifest.xml:

<manifest ...>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
    <application ...>
        ...
    </application>
</manifest>

Una vez que lo tengas, podrás crear un canal de notificaciones.

Cómo crear un canal de notificaciones

Crea un canal de notificaciones para mostrar correctamente tus notificaciones y permitir que el usuario las administre en la configuración de la app. Para obtener más información sobre los canales de notificaciones, consulta Cómo crear y administrar canales de notificaciones.

Crea los canales de notificaciones en el método onCreate de tu clase Application:

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)
    }
}

Cuando el usuario ejecute tu app por primera vez, verá algo similar a la figura 1 en la pantalla del sistema Información de la app:

Una imagen que muestra la información de la app y la pantalla de notificaciones.
Figura 1: Sección de notificaciones en la pantalla Información de la app de la configuración del sistema correspondiente.

Administrar permisos de notificaciones

A partir de Android 13, solicita permisos de notificaciones antes de mostrarlas a los usuarios.

La implementación mínima se ve de la siguiente manera:

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")
}

Si tu dispositivo ejecuta Android 13, cuando presiones el botón Request permission, se activará el diálogo que se muestra en la figura 2:

Una imagen que muestra el diálogo de solicitud de permiso
Figura 2: Diálogo del sistema para la solicitud de permisos de notificaciones.

Si el usuario acepta la solicitud de permiso, la sección Información de la app se verá como la Figura 3:

Una imagen que muestra la pantalla Información de la app después de la solicitud de permiso de notificación
Figura 3: Se otorgaron permisos de notificaciones.

Cómo crear una notificación de prioridad alta

Cuando crees la notificación, incluye un título y un mensaje descriptivos.

El siguiente ejemplo contiene una notificación:

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())
}

Cómo mostrar la notificación al usuario

Llamar a la función showNotification() activa la notificación de la siguiente manera:

Kotlin

Button(onClick = { showNotification() }) {
    Text(text = "Show notification")
}

La notificación de este ejemplo se parece a la Figura 4:

Una imagen que muestra una notificación de prioridad alta
Figura 4: Una notificación de prioridad alta.

Notificación en curso

Cuando muestras la notificación al usuario, este puede confirmar o descartar la alerta o el recordatorio de la app. Por ejemplo, puede aceptar o rechazar una llamada entrante.

Si tu notificación es continua, como una llamada entrante, asóciala con un servicio en primer plano. En el siguiente fragmento de código, se indica cómo mostrar una notificación asociada con un servicio en primer 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);