Introducción a FirefoxOS vol. 2: API de alarmas

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn

Hace un tiempo comenzamos a rascar la superficie del mundo de la programación en Firefox con HTML5, para los que lleguéis nuevos, o los que queráis recordar esa breve introducción aquí podéis leerla.

Comencemos en este segundo volumen a conocer un poco más sobre las APIs de las que disponemos para desarrollar nuestras aplicaciones. En este volumen, nos centraremos en la utilización de la API de Alarmas, que por su extensión, me obliga a dejar para otros posts la explicación de otras.

Alarmas

Como bien se puede intuir, nos servirá para crear alarmas, pero también funcionará para permitir la “comunicación” entre aplicaciones. Con ella, podremos ser capaces de mostrar una notificación, o hacer que una aplicación se ejecute y se comporte como deseemos. La API de las alarmas hará que se envíe un mensaje de sistema para cualquier aplicación que esté a la espera de un mensaje (si está programada para ello) y reaccione a nuestra notificación.

Es necesario a la hora de programar una alarma, elegir el momento en el que queremos que se ejecute, y se nos proporciona para ello dos tipos, las que respetan la zona horaria, y las que la ignoran, vamos a ver ambos casos:

Ignorando zona horaria:

La alarma reacciona con respecto a la zona horaria configurada en el dispositivo, es decir, si el usuario una vez fijada una alarma cambia la zona horaria, la alarma se retrasará o adelantará con respecto a la nueva zona horaria configurada.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Primero, indicamos a la hora que ha de ejecutarse

var date = new Date(“May 19, 2013 20:00:00”);

// Ahora, creamos la información que pasaremos a la alarma

var data = {

key : “value”

}

// Solicitamos al sistema la creación de la alarma

// El parámetro “ignoreTimezone” indica que no tome referencia de la zona horaria

var request = navigator.mozAlarms.add(date, “ignoreTimezone”, data);

// Y ahora, programamos los manejadores para escribir un mensaje de error o de ok

request.onsuccess = function() {

console.log(“La alarma ha sido programada”);

}

request.onerror = function () {

console.log(“Error al programar la arlama: ”+ this.error.name);

}

Respetando zona horaria:

En este caso, la alarma respetará la zona horaria, y se programará a una hora relativa a esta, es decir, que aunque el usuario cambie la zona horaria del dispositivo, la alarma seguirá programada con respecto a la zona horaria original con la que fue programada.

Para ello, todo sería igual salvo el parámetro que indicamos arriba que servía para indicar que ignorase la alarma, quedando esa línea de la siguiente manera:

1
var request = navigator.mozAlarms.add(date, “honorTimezone”, data);

Administrar Alarmas

Todas las alarmas que programemos, podremos administrarlas tras obtener una lista de todas las que ha programado la aplicación a través de la función mozAlarms.getAll(), que devolverá un Array de objetos MozAlarm que sigue la siguiente estructura:

  • id – Un número representativo del id de la alarma.
  • date – Una instancia del tipo Date que representa la fecha para la que ha sido programada.
  • respectTimezone – String que indica si se respeta o no la zona horaria.
  • data – Objeto javascript con todos los datos que son almacenados con la alarma.

Veamos un ejemplo de código para obtener un listado de alarmas y mostrar sus atributos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// Primero, obtenemos todas las alarmas

var request = navigator.mozAlarms.getAll();

// Y programamos el manejador cuando todo vaya bien

request.onsuccess = function() {

// Recorremos cada uno de los resultados

this.result.forEach(function (alarm) {

var respetaZH = ”No”;

if(alarm.respectTimezone == “honorTimezone”)

{

respetaZH = “Si”;

}

console.log(‘Id: ‘ + alarm.id);

console.log(‘Fecha: ‘ + alarm.date);

console.log(‘Respeta Zona Horaria: ‘ + respetaZH);

console.log(‘Datos: ‘ + JSON.stringify(alarm.data));

});

});

request.onerror = function() {

console.log(“Ha ocurrido un error obteniendo las alarmas: “ + this.error.name);

}

Una vez visto cómo obtener los datos de las alarmas, es importante conocer también, que pasando un id como parámetro, podemos eliminar una alarma con la siguiente función:

1
navigator.mozAlarms.remove(idAlarma);

Manejando Alarmas

Por último, sólo nos queda ver cómo programar unos manejadores de eventos de alarmas, para que nuestra aplicación responda a las alarmas enviadas por nosotros, o por otras aplicaciones.

Para ello, es importante seguir dos pasos, ¿recordáis el manifiesto que vimos en el último post y que informaba de los privilegios que necesita nuestra aplicación?, pues es necesario, en primer lugar, añadir a dicho manifiesto, en la sección de “messages”, una línea indicando que necesita acceder a las alarmas, y con el fichero html que tiene el script del manejador. Por ejemplo, si nuestro manejador estuviera en el index.html, quedarían unas líneas en el manifiesto como las que siguen:

1
2
3
4
5
“messages” : [

{ “alarm” : “/index.html” }

]

En segundo lugar, es necesario registrar el manejador en la aplicación con el mensaje de “alarm”. Esto se hará con la función navigator.mozSetMessageHandler. Por ejemplo, supongamos que cuando se active una alarma, queremos que se imprima un mensaje informando de ello y la información que contiene la alarma:

1
2
3
4
5
navigator.mozSetMessageHandler(“alarm”, function(mozAlarm) {

alert(“Ha saltado la alarma: “ + JSON.stringify(mozAlarm.data));

});

Para saber si una aplicación tiene alguna alarma pendiente, podemos ejecutar la siguiente función

1
navigator.mozHasPendingMessage(“alarm”);

Y con esto ya somos capaces de crear, eliminar, y obtener alarmas, además de poder crear nuestros manejadores de eventos.

Para el siguiente volumen, seguiremos viendo más APIs con las que poder trabajar para hacer nuestras aplicaciones.

Todo el mundo tiene uno o varios puntos de inflexión en su vida, y el mio vino cuando conseguí una SuperNintendo. Desde entonces, decidí que quería dedicarme al desarrollo de videojuegos, y estudié Ingeniería Informática. Por el camino, descubrí lo interesante que era desarrollar páginas web, y más tarde, aplicaciones para móviles. No sé qué me deparará mañana, pero seguro que estaré por aquí.

Comentarios arrow

Escribe un comentario

Tu e-mail no será publicado. Los campos marcados con un asterisco son obligatorios.