miércoles, 15 de junio de 2011

Verificar si hay conexión de internet con Adobe AIR

Para verificar si hay o no conexión a internet desde una aplicación AIR, deberá de importar:
  • la clase URLRequest,
  • la clase URLMonitor que supervisa la disponibilidad de un servicio basado en HTTP o en HTTPS. Esta clase se encuentra en el paquete air.
  • La clase StatusEvent: Un objeto distribuye objetos StatusEvent cuando un dispositivo (por ejemplo, una cámara o un micrófono) o un objeto, como un objeto LocalConnection, informa sobre su estado.
Para utilizar el paquete air.net en Adobe Flash CS4 Professional:
  1. Seleccione el comando Archivo > Configuración de publicación.
  2. En el panel Flash, haga clic en el botón Configuración de Seleccionar ruta de biblioteca de ActionScript 3.0.
  3. Haga clic en el botón Navegar hasta el archivo SWC. En la carpeta de instalación de Adobe Flash CS4, navegue hasta Adobe Flash CS4/AIK1.1/frameworks/libs/air/ y seleccione el archivo servicemoniter.swc.
  4. Haga clic en el botón Aceptar.
  5. Añada la siguiente sentencia import al código ActionScript 3.0: import air.net.*;
Librería para el componente de monitoreo en Adobe AIR
En Flash CS3 se cuenta con un componente para ello.
Nota: Si no importa este paquete, la aplicación le marcará error.

CODIGO:

//Imports
import air.net.URLMonitor;
import flash.net.URLRequest;
import flash.events.StatusEvent;
//El monitoreo se hace tratando de acceder a una dirección de Internet.
//Puede ser la URL de la aplicación o una dirección confiable, digamos www.google.com.
var q:URLRequest = new URLRequest("http://www.google.com");
//El método de la solicitud será en HEAD. Su uso es exclusivo para AIR.
q.method = "HEAD";
//Creamos un objeto de monitoreo de la clase ya señalada:
var monitor:URLMonitor = new URLMonitor(q);
//Recibiremos el status en un listener
monitor.addEventListener( StatusEvent.STATUS, onStatusEvent);
//Pooleamos el servicio cada segundo
monitor.pollInterval = 1000;
//Iniciamos el monitoreo
monitor.start();
/*************************************************************************************/
//La función listener:
function onStatusEvent(e:StatusEvent):void {
//Recibimos el status del monitoreo
var monitor:URLMonitor = e.target as URLMonitor;
//Preguntamos si hay servicio
    if (monitor.available) {
       //Acciones si hay servicio

    } else {

       //Acciones si no hay servicio

   }

}

martes, 14 de junio de 2011

Actualizar una aplicación desde Internet con Adobe AIR

Primero debemos crear un archivo XML el cual controlará la versión. Se debe ubicar de preferencia en el servidor de la aplicación, por ejemplo: 

Ahora verificaremos la versión de este archivo contra la versión de la aplicación, con lo cual procederemos a la actualización:

Con su respectivo listener:

Hasta aqui es solo leer un archivo XML. Obviamente hay que llamar a la función verificarActualizaciones() para que inicie la verificación. Ahora que sabemos la versión, estamos listos para bajar la nueva versión. Para ello la bajaremos como un archivo binario (obviamente):
//
var stream:URLStream;
var fileData:ByteArray;
//
Al finalizar de leer el archivo XML, lanzamos una función que baje el archivo AIR (bajarActualizacion()).

Ahora haremos la función que inicia la copia del archivo en nuestra máquina:

Disparamos la función listener Observe que estamos grabando el archivo en el escritorio, aunque lo mas propio sería grabarlo en la carpeta de la aplicacción (applicationDirectory):

Ya una vez abajo el archivo, procederemos a actualizar la aplicación. Claro, primero comprobaremos la versión actual de la aplicación con la nueva versión:
Al verificar la aplicación con AIR Debug Launcher (ADL), llamar al método update() produce una excepción IllegalOperationError.
En Mac OS, para instalar una versión actualizada de una aplicación, el usuario debe disponer de los privilegios necesarios para instalar aplicaciones en el directorio de aplicaciones. En Windows o en Linux, el usuario debe disponer de privilegios de administrador.
Si la versión actualizada de la aplicación requiere una versión actualizada del motor de ejecución de , se instala la versión más reciente del motor de ejecución. Para actualizar el motor de ejecución, el usuario debe disponer de privilegios de administrador en el equipo.
Nota: es preciso especificar el parámetro version por motivos de seguridad. Al solicitar a la aplicación que verifique el número de versión del archivo de AIR, la aplicación no instala de forma accidental una versión anterior que aún pueda contener vulnerabilidades de seguridad solucionadas en versiones posteriores.
Parámetros

airFile:File — Objeto File que apunta al archivo de AIR que contiene la versión de actualización de la aplicación
 

version:String — Versión requerida por el nuevo archivo de AIR. La cadena del atributo version del elemento application principal del archivo descriptor de la aplicación para el archivo de AIR debe coincidir con este valor para que la actualización se realice correctamente.


viernes, 10 de junio de 2011

Vaciar una tabla de SQLite en un DataGrid con Adobe AIR

Primero necesitamos un componente DataGrid en el escenario y lo nombramos como "datos".
Importamos las clases para manejar la base de datos y creamos el objeto de conexión:

import flash.data.*;
import flash.filesystem.File;
//
var conn:SQLConnection;
//Establecemos la conexión:
openConnection();
//
function openConnection():void {
    var dbFile:File=File.applicationDirectory.resolvePath("libro.db");
    conn = new SQLConnection();
    conn.addEventListener(SQLEvent.OPEN, onDBOpen);
    conn.addEventListener(SQLErrorEvent.ERROR, onDBError);
    conn.openAsync(dbFile);
    //
}
//Hacemos los listeners para los resultados de la conexión:
function onDBOpen(e:SQLEvent):void {
    //
    trace("Se abrio la base de datos en forma exitosa");
    leeTabla();
}
function onDBError(e:SQLErrorEvent):void {
    trace("Error en la base de datos");
}
//Si la conexión fue exitosa, lanzamos le query para leer la tabla con sus respectivos listeners:
function leeTabla():void {
    trace("Lee tabla");
    var query:SQLStatement = new SQLStatement();
    query.sqlConnection=conn;
    var queryText = "SELECT * FROM registro ORDER BY usuario, fecha, hora";
    query.text=queryText;
    query.addEventListener(SQLEvent.RESULT, onSelectResult);
    query.addEventListener(SQLErrorEvent.ERROR, onDBError);
    query.execute();
}
//Finalmente leemos los datos y los vaciamos en el datagrid:
function onSelectResult(e:SQLEvent):void {
    var q:SQLStatement=e.target as SQLStatement;
    var r:SQLResult=q.getResult();
    for each (var o:Object in r.data) {
       datos.addItem(o);
    }
}

domingo, 5 de junio de 2011

Detectar el cerrar una aplicación AIR

Detectar cuando el usuario presiona el botón de cierre nos servirá para almacenar información del usuario o de la palicación. Se recomienda que los procesos de almacenamiento de la información sean "sincronos". Para ello neceitamos crear un listener a la aplicación misma:

NativeApplication.nativeApplication.addEventListener( Event.EXITING, onSalir);

y crear un listener:

function onSalir(e:Event) {
// comandos para la rutina de salida
}

miércoles, 1 de junio de 2011

Crear una tabla en una base de datos local con Adobe AIR

Primero se deberá conectar a una base de adtos en forma exitosa. Psteriormente denerá generar una tabla con la sentencia SQL correspoendiente, es decir, CREATE TABLE. Las clases invulcradas son: La clase SQLStatement: Se utiliza una instancia de SQLStatement para ejecutar una declaración SQL y compararla en una base de datos SQL local abierta mediante una instancia de SQLConnection.

EJEMPLO:

var query:SQLStatement = new SQLStatement();
query.sqlConnection=conn;
var queryText = "CREATE TABLE IF NOT EXISTS 'opcionMultiple' "+
"(id INTEGER, "+
"libro INTEGER, "+
"bloque INTEGER, "+
"unidad INTEGER, "+
"leccion INTEGER, "+
"actividad INTEGER, "+
"numPregunta INTEGER, "+
"pregunta TEXT, "+
"opcion1 TEXT, "+
"opcion2 TEXT, "+
"opcion3 TEXT, "+
"respuesta INTEGER)";
query.text=queryText;
query.addEventListener(SQLEvent.RESULT, onQueryResult);
query.addEventListener(SQLErrorEvent.ERROR, onDBError);
query.execute();

Conectarse a una base de datos con Adobe AIR

Para conectarse a una base de datos local, entiéndase SQLite, necesitamos importar previamente las siguientes clases:
  • La clase SQLConnection: Se utiliza una instancia de SQLConnection para administrar la creación y la conexión de archivos con la base de datos SQL (bases de datos locales).
  • La clase SQLEvent y SQLErrorEvent, las cuales conectó la base de datos en forma exitosa o si hubo un error:
  • La clase File: Objeto File que representa una ruta de archivo o de directorio. Puede tratarse de un archivo o directorio existente, o bien uno que aún no exista (por ejemplo, puede representar una ruta de archivo o directorio que se va a crear).

CODIGO:

//Imports
import flash.data.*;
import flash.filesystem.File;
//Creamos la conexión, generalmente lo haremos fuera de las funciones, ya que será utilizado
//en otras funciones
var conn:SQLConnection;
//Código para iniciar la conexión a la base de datos local:

//Busca (0 crea) el archivo
var dbFile:File=File.applicationDirectory.resolvePath("libro.db");
//Realiza la conexión
conn = new SQLConnection();
//Si es exitosa la conexión
conn.addEventListener(SQLEvent.OPEN, onDBOpen);
//Si no es exitosa
conn.addEventListener(SQLErrorEvent.ERROR, onDBError);
//Abre el archivo en forma asincrona
conn.openAsync(dbFile);
//Los listeners
function onDBOpen(e:SQLEvent):void {
    //
    trace("Se abrio la base de datos en forma exitosa");
}
function onDBError(e:SQLErrorEvent):void {
    trace("Error en la base de datos");
}