¿Cómo funciona Alarm Manager en Android? Análisis completo en Kotlin con un ejemplo real
\n\n¿Alguna vez te has preguntado cómo funcionan los despertadores en tu teléfono? ¿O cómo una aplicación de notas te recuerda una reunión exactamente a las 14:30? En Android, esto lo gestiona un potente servicio del sistema: Alarm Manager. Aunque su nombre se traduce como "gestor de despertadores", en realidad es un planificador de tareas universal que permite ejecutar código en un momento determinado, incluso si tu aplicación está minimizada o el teléfono está en modo de suspensión.
\n\nEl tema Alarm Manager Example es una de las consultas más populares en StackOverflow (miles de visitas y decenas de preguntas). Y no es de extrañar: los principiantes a menudo se confunden con PendingIntent, BroadcastReceiver y los numerosos métodos como set(), setRepeating() o setExact(). En este artículo, analizaremos un ejemplo funcional real en Kotlin que podrás aplicar inmediatamente en tu proyecto. Sin rodeos: solo código y explicaciones.
¿Qué es Alarm Manager y para qué sirve?
\n\nAlarm Manager es un servicio del sistema Android que permite a tu aplicación ejecutar acciones en un momento determinado. La característica principal es que funciona independientemente del ciclo de vida de tu aplicación. Puedes configurar una alarma, cerrar la aplicación, apagar la pantalla, y Alarm Manager igualmente ejecutará la tarea en el momento indicado.
\n\nCasos de uso típicos:
\n- \n
- Recordatorios de eventos (reuniones, cumpleaños) \n
- Sincronización periódica de datos con el servidor \n
- Notificaciones programadas (por ejemplo, "No olvides beber agua en 2 horas") \n
- Ejecución de tareas en segundo plano según un horario \n
Es importante entender: Alarm Manager no es un temporizador preciso para intervalos de milisegundos. Para eso existen Handler o Coroutines. Alarm Manager está optimizado para funcionar a nivel del sistema teniendo en cuenta el ahorro de energía.
Componentes principales: PendingIntent y BroadcastReceiver
\n\nAntes de escribir código, comprendamos dos conceptos clave sin los cuales Alarm Manager no funciona.
\n\nPendingIntent es una "intención diferida". No ejecutas la acción de inmediato, sino que la empaquetas en un contenedor especial que Alarm Manager ejecutará en el futuro. Imagina que le das a un mensajero un sobre sellado con una instrucción: "Ábrelo exactamente a las 15:00". El sobre es el PendingIntent.
\n\nBroadcastReceiver es un receptor de mensajes de difusión. Cuando Alarm Manager se activa, envía un mensaje de difusión (broadcast) que es capturado por tu BroadcastReceiver. Es aquí donde escribes el código que debe ejecutarse con la alarma.
\n\nEjemplo paso a paso: creamos un despertador en Kotlin
\n\nEscribamos una aplicación simple que muestre una notificación 10 segundos después de presionar un botón. Este ejemplo está basado en código real de una respuesta popular en StackOverflow.
\n\nPaso 1. Crear el BroadcastReceiver
\n\nCrea una nueva clase que manejará la activación de la alarma:
\n\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport android.widget.Toast\n\nclass AlarmReceiver : BroadcastReceiver() {\n override fun onReceive(context: Context, intent: Intent) {\n // Este código se ejecutará cuando suene la alarma\n Toast.makeText(context, "¡Alarma activada!", Toast.LENGTH_LONG).show()\n }\n}\n\nPor ahora, solo mostramos un Toast. En una aplicación real, aquí podría ir la creación de una notificación, el inicio de un servicio o cualquier otro código.
\n\nPaso 2. Registrar el BroadcastReceiver en el manifiesto
\n\nPara que el sistema conozca nuestro receptor, debemos registrarlo en AndroidManifest.xml:
<receiver android:name=".AlarmRecei