Contents
- 1 ¿Cómo programar una alarma en Android Studio?
- 2 Añadir los permisos necesarios para hacer una alarma en Android Studio
- 3 Otras modificaciones en el Android Manifest
- 4 La clase AlarmReceiver
- 5 La clase NotificationService
- 6 Tutorial Crear una Alarma en Android Studio
- 7 Hacer que la alarma se mantenga tras el reinicio
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 programar 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.
Código de alarma en Android Studio
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 hacer 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
- Hereda de BroadcastReceiver, para poder escuchar los eventos del sistema.
- 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
- Hereda de IntentService, para poder ser llamada por la clase AlarmReceiver a través de un intent.
- 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í:
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 TFG en android, contacta conmigo.
Soy Víctor Alonso, ingeniero en informática por la Universidad de Castilla-La Mancha. He trabajado en el desarrollo de aplicaciones móviles nativas en Android durante más de 8 años. Durante mi carrera en las diferentes empresas en las que he estado me he formado en múltiples tecnologías y metodologías de desarrollo. Desde 2015 soy autónomo y trabajo como desarrollador Android y desarrollador web freelance desde mi despacho en Albacete. Siempre estoy en constante formación, aprendiendo cosas nuevas sobre tecnología e idiomas y poseo certificados B2 de inglés y alemán. Ahora en 2019 dirijo un equipo de desarrolladores web multidisciplinar. Si necesitas un desarrollador Android o web freelance de confianza que sepa captar rápidamente las necesidades de tu proyecto no dudes en contactarme. Puedes obtener más información o referencias sobre mis habilidades como programador freelance en mi perfil profesional en linkedin.