Crear una Alarma en Android Studio

Desarrollar una app Android  no es tarea fácil, sobre todo si estamos iniciándonos en la programación en general o en esta tecnología en particular. Muchas veces ocurre que tenemos ideas para apps que son muy buenas pero luego no es fácil llevarlas a cabo. En este post vas a aprender a crear una alarma en Android Studio en el calendario Android mediante programación.

Si tienes una idea para una app que implique poner alarmas: por ejemplo para avisarte de las visitas al médico, para cocinar, para no olvidar que tienes el coche estacionado, etc. Queda atento a este tutorial y podrás poner todas las alarmas que quieras en tu app Android.

¿Cómo crear una alarma en Android Studio?

Para poder crear una alarma en el sistema, tenemos que hacer uso de la clase AlarmManager que nos proporciona el mismo Android. Esta clase creará una alarma que podremos configurar para que suene (una o varias veces), con un tono determinado por nosotros y a la hora que le digamos.

Una vez llegue el momento, se creará un evento de Broadcast en el que se notificará a quien esté escuchando (esto lo haremos un poco más adelante) de que se ha disparado la alarma. Así podremos reaccionar ante la señal y mostrar una notificación.

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 para crear una alarma en Android Studio

Debemos especificar en Android Studio qué permisos vamos a utilizar para crear la alarma. Como sabes, éstos se colocan en el Manifest de Android, fuera de la etiqueta Application:

<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" />

Otras modificaciones en el Android Manifest

También debemos registrar las dos clases que vamos a utilizar, una para recibir la alarma (AlarmReceiver) y la otra para mostrar la notificación, que será un servicio (NotificationService).

La clase AlarmReceiver

La clase AlarmReceiver estará escuchando el evento de Alarma creado en la clase principal con el código que hemos visto antes, el del AlarmManager. Una vez que llegue la notificación, ésta lanzará el servicio NotificationService.

Características de la clase AlarmReceiver

  1. Hereda de BroadcastReceiver, para poder escuchar los eventos del sistema.
  2. Lanza el servicio NotificationService.

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

Esta clase se encarga de mostrar la notificación en la barra de estado de la app. Es un servicio, ya que no tiene interfaz y se ejecuta en segundo plano, en ella configuraremos la notificación con el texto, la vibración, un sonido e, incluso, iconos para mostrar.

Características de la clase NotificationService

  1. Hereda de IntentService, para poder ser llamada por la clase AlarmReceiver a través de un intent.
  2. Muestra la notificación, configurando texto, iconos, vibración y sonido.

Tutorial Crear una Alarma en Android Studio

En youtube tienes todo el proceso paso a paso, puedes ver el vídeo aquí también.

En la descripción del mismo está el enlace a Github y a la presentación, pero también se puede descargar desde aquí:

PresentaciónGitHub

También puedes hacer click en el siguiente enlace si necesitas ayuda en un proyecto Android. Contrata ahora un desarrollador Android experto.

 

Hacer que la alarma se mantenga tras el reinicio

Si seguimos todo lo anterior la alarma funcionará, el problema estará en que, al apagar y encender de nuevo el dispositivo, ésta se habrá borrado. Para solucionarlo hay que instroducir unos pequeños ajustes en el código que harán lo siguiente:

  • Almacenar la hora a la que se quiere disparar la alarma.
  • Escuchar el evento de reinicio y lanzar un servicio.
  • Mover el código de creación de alarma a una clase estática para que se pueda usar desde el servicio.
  • Recuperar la hora y poner la alarma nueva a esa hora.

En github tienes el código actualizado a la nueva versión, pero aquí te dejo un vídeo explicativo, paso por paso con todo lo que hay que hacer para mantener las alarmas tras un reboot.

Y ya sabes, si necesitas ayuda en tu TFM en android, contacta conmigo.