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.

Miniordenadores ¿qué opciones hay?

Todavía no he probado ninguno de estos miniordenadores, pero tras el susto que me llevé con el portátil hace unos días he estado pensando en hacerme con uno. A fin de cuentas, para lo más básico (consultar el correo electrónico, picar código) permiten ir tirando.

De momento los procesadores ARM se están llevando la palma en estos dispositivos, generalmente con SO Android o Linux. Aunque Intel ha anunciado la idea de sacar un modelo con arquitectura x86 bajo el nombre de NUC, pero en principio parece que este diseño iba destinado sólo a sistemas embebidos.

El proyecto inglés Raspberry Pi ha recibido muchos aplausos en los últimos timpos. Se trata de un proyecto orientado al campo educativo, pretendiendo ofrecer un sistema funcional a muy bajo coste orientado a la enseñanza de la programación a jóvenes estudiantes. Con 256 MB compartidos entre la RAM y la GPU, un CPU ARM mononúcleo a 700 MHz, salida vídeo HDMI y RCA y almacenamiento en tarjeta SD, se comercializan dos versiones: una de 25$ con un solo puerto USB y sin conexión a la red, y otro a 35$ con conexión 10/100 Ethernet RJ-45 y dos puertos USB (2.0). Aunque la idea de la fundación es que funcione con RISC-OS, existe soporte de Arch Linux, Debian o Fedora.

Como no, cuando se trata de producto barato los chinos tienen que sacar la cabeza. Los Allwiner 10 MK802, con aspecto de un usb grande (en esto ganan al Raspberry Pi por goleada), son equipos pensados originalmente para operar con Android (soportan la versión 4.0) aunque no deberían dar problemas con las versiones de Linux para procesadores ARM. Con un precio alrededor de los 74$, son bastante más potentes que el Pi: procesador mononúcleo de 1.5 GHz, 512 megas de RAM, GPU Mali 400, un puerto USB 2.0, un mini USB y una ranura para MicroSD. La salida de vídeo es HDMI e incluye receptor wifi interno.

La taiwanesa VIA Technologies también ha sacado una placa estilo Raspberry Pi por 49$. Montra un procesador ARM de 800 MHz, 512 megas de RAM DDR3, 2 gigas de memoria flash interna ampliable mediante tarjetas micro SD, salida de video VGA y HDMI, entrada y salida de audio por jack de 3.5», cuatro USB 2.0, Ethernet LAN RJ-45… En principio viene con Android 2.3 y lo que no está claro es cómo será de abierto el sistema, si permitirá actualizar el Android libremente o habrá que esperar a que lo haga el fabricante, o si se podrán instalar versiones de Linux para ARM.

Finalmente la TXI Cotton Candy presenta un precio más caro (alrededor de los 199$) acompañado de un diseño atractivo, similar a un pen USB de 8 centímetros, con un conector USB macho que permite conectarlo a televisores, monitores o equipos que tengan puerto USB sin necesidad de cable HDMI. En todo casi también incorpora salida de vídeo HDMI para dispositivos sin USB, puerto micro USB, posiblidad de ampliar la memoria interna con tarjeta MicroSD hasta 64 gigas, 1 giga de RAM, GPU Mali-400 y procesador ARM de 1,2 GHz. Además permite conectividad wifi y bluetooth. Trabaja con SO Android y Ubuntu, e incluye un cliente de vitualización para Windows, MacOS y Linux.

¿Utilidad? Son equipos baratos y muy portátiles. Para mucha gente que sólo necesita el ordenador para surfear por la web pueden ser sobradamente potentes, y para otra pueden funcionar como un equipo de repuesto.