Crear Alarma en Android Studio

Desarrollar una app Android en Android Studio 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 poner alarmas 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.

Crear la Alarma usando la clase AlarmManager

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 la alarma en Android

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 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 contactarme si necesitas ayuda en un proyecto Android.