Ya sea para una aplicación de despertador, para programar una actualización diaria, para hacer una app de notas de aviso… cuando desarrollamos una app para android es muy útil (y a veces indispensable) poder aprovechar para programar que una aplicación se lance a una determinada hora.
Suponiendo que ya sabes sobre desarrollo Android, la idea es simple: creas una activity que, al recibir un evento de calendario (con la hora concreta) lanza la otra activity en cuestión. Por ejemplo, «Quiero que todos los días a las 12:01 la aplicación se conecte a la base de datos y actualice la información».
El primer paso, lo dicho, es crear una clase que herede de BroadcastReceiver, sobreescribiendo su método onReceive:
public class Temporizador extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Intent actividadALanzar = new Intent(context, actividadALanzar.class);
context.startActivity(actividadALanzar);
}
}
Debemos declarar esta clase en el Android Manifest, dentro de la etiqueta
<receiver android:process=":remote" android:name="Temporizador"></receiver>
Lo siguientes es crear la pantalla principal y programar el evento, usando una clase PendingIntent:
Intent intentoLanzar = new Intent(getBaseContext(), Temporizador.class); PendingIntent pIntent=PendingIntent.getBroadcast(this, 0, intentoLanzar, PendingIntent.FLAG_UPDATE_CURRENT);
Finalmente basta con crear un objeto calendario, con las horas definidas, y utilizar el AlarmManager para lanzar el intento pendiente a la hora prefijada (en este caso, estará pillando la hora actual):
Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(System.currentTimeMillis()); cal.set (Calendar.HOUR_OF_DAY, timePicker.getCurrentHour()); cal.set (Calendar.MINUTE, timePicker.getCurrentMinute()); cal.set (Calendar.SECOND, 0); AlarmManager aMan = (AlarmManager)getSystemService(ALARM_SERVICE); aMan.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pIntent);
Aunque este método os permite hacer llamadas periódicas a la aplicación, esto no es recomendable por el excesivo consumo de energía. Los servicios se crearon para hacer eso de forma eficiente.