Alarmas
En este ejemplo se establecerá una alarma en el dispositivo Android que se lanzará dependiendo de la especificación del usuario. La clase que utilizaremos será AlarmManager
y el componente que recibirá la alerta será un BroadcastReceiver
.
Primeramente, se recuperan los valores introducidos por el usuario a la que se programa la alarma. Recuperamos las variables y creamos un objeto de tipo Calendar
. Esta clase nos ayudará a convertir la hora y minutos a milisegundos.
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(editTextHora.getText().toString()));
calendar.set(Calendar.MINUTE, Integer.parseInt(editTextMin.getText().toString()));
calendar.set(Calendar.SECOND, 0);
A continuación, al igual que hicimos con las notificaciones, definimos un PendingIntent
especificando que será un componente de tipo BroadcastReceiver
quien lo reciba (podría ser otro componente diferente). Además, pasamos como parámetro el intent explícito hacia la clase donde queremos enviarlo.
Intent intent = new Intent(this, Alarma.class);
pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
Por último, se establece la alarma a través de un objeto de la clase AlarmManager
.
// Se crea la instancia de AlarmManager
AlarmManager alarmManager = (AlarmManager) this.getSystemService(this.ALARM_SERVICE);
// Se lanzará de forma inexacta
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, pendingIntent);
Esta es una forma de crear una alarma inexacta, la cual puede retrasarse algunos segundos. Es un tipo de alarma que consume menos batería que una exacta. Es la recomendable si no necesitamos que se lance justo en el tiempo especificado.
No hay que olvida que, si es un componente propio el que recibirá la alarma como es el caso, también debemos programarlo.
public class Alarma extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Alarma", Toast.LENGTH_SHORT).show();
Log.i("prueba", "alarma lanzada");
}
}
Es un sencillo BroadcastReceiver
como los creados en temas anteriores.
- Proyecto GitHub: https://github.com/Manuel-Ag/PMD_19-20/tree/master/Alarmas