Programando un activity de Android para que se abra a una hora definida

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.

Anuncios

10 comentarios en “Programando un activity de Android para que se abra a una hora definida

  1. Y suponiendo que no tenga ni idea de desarrollo Android…
    Se me plantea esta cuestión. Necesito que se me abra un link/imagen/pdf/archivo de forma programada a modo de recordatorio.
    El calendario de Android no da la posibilidad de meter archivos adjuntos a las notificaciones o tareas que se le añaden.
    Existe alguna app sencilla para hacer algo así? A mi se me ha ocurrido un “post later” para una app de twitter… pero debe de haber algo más.

    Me sabes decir?

    Saludos!

  2. DayDreamer

    tengo problemas con el código: cuando programo una alarma así y cierro mi aplicación, no aparece la notificación! alguien sabe como se puede arreglar ?

  3. Buenas tardes mi duda es la siguiente
    al tener todo el código listo y al momento de exportarlo en Phenegap el codigo seguiria funcionando ya que me a pasado en varias programaciones.
    y si a este código de alertas como le puedo poner sonido particular a mi app

    Gracias

  4. Nitram

    Buenas… podría hacer eso, pero desde mi aplicación o de alguna otra forma encender el terminal (no digo despertarlo del standby, sino del power off total), de forma que sonase la alarma programada en mi aplicación aun estando el telédono apagado??

    Gracias de antemano

  5. David

    Muy bueno, estoy elaborando un programa en la cual quiero q me aparezca una notificación en una fecha determinada por ejemplo cada fin de mes me aparezca una notificación sin apretar botón sino que actúe en segundo plano por favor una ayuda
    Gracias de antemano saludos

  6. vivi

    Necesito algo que me avise cada 12 horas con un bip y dejando rastro en la pantalla (todos los días del año ).
    No tengo ni idea de programaciòn, alguien sabe cómo facilitarme el tema??

  7. Hola Que buen tutorial, tengo la siguiente pregunta, tengo una aplicación en la cual quiero que yo sea el administrador del calendario en el cual los usuarios ingresen y puedan solicitar una cita, pero solo yo la pueda aceptar y les llegue un mensaje a los usuarios de si fue o no aceptada la cita. Agradezco toda tu colaboración y apoyo.

    1. Ahora mismo no puedo contestarte porque no sabría qué decirte, no recuerdo cómo va el tema de las notificaciones push. Pero probablemente tenga que hacer algo así a medio plazo, así que cuando lo tenga compartiré algún ejemplo. Hace mucho que no trabajo con Android.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s