Si has empezado a trabajar con Android Studio y quieres exprimir al máximo todas las opciones de tu dispositivo, tal vez te hayas planteado alguna vez crear una aplicación que haga uso de alarmas.
Las alarmas son tremendamente útiles, porque nos van a permitir programar eventos, mostrar notificaciones y avisar al usuario cuando queramos ( o cuando él quiera). En la actualidad, muchísimas aplicaciones modernas utilizan el sistema de alarmas de Android: algunas se usan como despertador, y otras, en cambio, se utilizan para instar al usuario a volver recurrentemente a utilizar la aplicación, con los beneficios económicos y de marca que ello conlleva. ¿Quieres aprender a hacer una app con alarmas en Android Studio? Pues sigue leyendo.
¿Cómo programar una alarma en Android Studio?
Crear una aplicación con un sistema de alarmas es una tarea sencilla si sigues con cuidado todos los pasos. Android nos ofrece una clase nativa, llamada AlarmManager que nos va a servir perfectamente para programar nuestras alarmas. La idea principal es instanciar el objeto y crear un Intent de alarma para determinada fecha (timestamp). Una vez llegue el momento, AlarmManager se encargará ella sola de lanzar un evento de Broadcast, que estaremos escuchando con una clase propia y podremos reaccionar; por ejemplo mostrando una Push Notification.
Estos son los pasos a seguir, de manera esquemática, para el uso de alarmas en una app en Android Studio.
Usar el código para crear la alarma
Solo tienes que copiar y pegar este código cuando quieras crear una alarma. El valor de la variable i es el identificador de la alarma; este debe ser único, pues si creas otra alarma con ese mismo ID, el primero será sobreescrito.
Por otro lado, el valor de la variable timestamp es el tiempo timestamp del momento en el que se quiere que suene la alarma.
AlarmManager alarmManager = (AlarmManager) ctx.getSystemService(ALARM_SERVICE);
Intent alarmIntent = new Intent(ctx, AlarmReceiver.class); PendingIntent pendingIntent; pendingIntent = PendingIntent.getBroadcast(ctx, i, alarmIntent, PendingIntent.FLAG_ONE_SHOT); alarmIntent.setData((Uri.parse("custom://" + System.currentTimeMillis()))); alarmManager.set(AlarmManager.RTC_WAKEUP, timestamp, pendingIntent);
Añadir los permisos necesarios en el Manifest
Debemos decirle a Android los permisos que vamos a utilizar para crear nuestra alarma; son unos cuantos, pero cada uno tiene su razón de ser. Ésta razón es bastante fácil de entender si comprendes bien el proceso bajo el que funciona la creación de las alarmas.
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name=”android.permission.READ_CALENDAR” /><uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name=”android.permission.WAKE_LOCK” /><uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="android.permission.VIBRATE" />
Crear la clase AlarmReceiver
Esta clase nos va a ayudar a recuperar el evento de alarma. Como hemos comentado, el evento se va a disparar como Broadcast, con lo que tendrá que heredar de BroadcastReceiver para poder quedar a la escucha. Cuando reaccione al evento, lo que hará será llamar a la clase NotificationService, que es un evento que ya hará lo que queramos hacer cuando suene la alarma. Recuerda definir esta clase como BroadcastReceiver en el Manifest.
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent service1 = new Intent(context, NotificationService.class);
service1.setData((Uri.parse(“custom://” + System.currentTimeMillis())));
ContextCompat.startForegroundService(context, service1 );
}
}
La clase NotificationService
Llegamos al último paso, creamos una clase que sea un Service y que haga lo que necesitamos para reaccionar a la alarma. Normalmente será levantar una notificación, pero puede ser cualquier otra cosa, e, incluso, hacer peticiones a un servidor de manera transparente al usuario.
Tutorial Crear Alarma en Android Studio
Si quieres ver cómo funciona todo esto paso a paso puedes ver el tutorial que creé en su día en el canal de WalkiriaApps. Además, tienes el código de la app de muestra aquí.
Hacer que la alarma se mantenga tras el reinicio
El tutorial anterior funcionará a las mil maravillas, pero… ¿qué pasa si el terminal se reinicia? En algunas versiones de Android el sistema operativo no conserva las alarmas fijadas cuando el teléfono se apaga, así que hay que inventar una forma de poder restituirlas, ¿quieres ver cómo? Pues no te pierdas este vídeo en el que se verán todos los pasos. Para que tengas una visión general te los resumo:
- Debemos establecer una forma de almacenar (usando Preferences) las alarmas que hayamos fijado anteriormente, para después poder leer de esa pequeña base de datos y restituirla.
- También aprenderemos a escuchar eventos de reinicio del dispositivo. Así, cuando se reinicie, podremos capturar el evento y restablecer las alarmas.
Esto sería, a grandes rasgos, lo que habría que hacer, pero aquí lo tienes perfectamente explicado.
Y esto es todo. Recuerda que puedo ayudarte con tus problemas de programación en Android a través de mi consultoría de aplicaciones en Walkiria Apps