Comunidad de diseño web y desarrollo en internet

Detectar la conexión a internet en AIR con Flex 3 Beta 3

Este tip lo armé en base a este problema que me encontré, pues hasta Flex 3 Beta 2, había una clase llamada Shell, con la cual uno podía detectar la conexión de la computadora, esto cambia en Flex 3 Beta 3, pues desaparecen la clase Shell y el evento que detecta la conexión lo mandan a NativeApplication, el siguiente ejemplo nos muestra como se detecta la conexión, es muy sencillo y requiere una llamada a cualquier página sobre Internet, pues es lógico que si se quiere saber si hay conexión a Internet, nos debe de poder devolver un resultado.

No voy a entrar a tanto detalle como: "Accedió a la página, pero aun así devolvió error" pues eso sería error de programación.

Código :

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
   <mx:Script>
      <![CDATA[
         import mx.rpc.events.ResultEvent;
         import mx.rpc.events.FaultEvent;
         import mx.controls.Alert;
         import flash.events.Event;
         import mx.managers.CursorManager;
         
         //Variable que nos ayuda a verificar si estamos o no en línea
         private var enLinea:Boolean = false;
         
         private function init():void {

            //mandamos llamar nuestro HTTPService
            rss_hs.send();

            //Agregamos el Listener que estara al tanto de lo que sucede con la conexión
            flash.desktop.NativeApplication.nativeApplication.addEventListener(Event.NETWORK_CHANGE, net_change);
         }
         private function invoke(e:mx.rpc.events.InvokeEvent):void {
            CursorManager.setBusyCursor();
         }
         private function fault(e:FaultEvent):void {
            //Si no pudo alcanzar la página, esta desconectado
            enLinea = false;
            CursorManager.removeBusyCursor();
            Alert.show("Hubo un error al procesar su solicitud.\nAl parecer estas desconectado de internet");
         }
         private function result_rss(e:ResultEvent):void {
            //Si hay un resultado, pues si estamos conectados
            enLinea = true;
            CursorManager.removeBusyCursor();
         }
         private function net_change(e:Event):void {
            /* invertimos el valor cada vez que cambia el estado de la red
             * esto es por que cuando hay exito en la consulta, se pone en true la variable
             * entonces cuando se hace el cambio de estado pasa de true a false
             * o bien, de conectado a desconectado y cuando no hay éxito, pues viceversa
             */
            enLinea = !enLinea;
            if(enLinea) Alert.show("Conectado!");
            else Alert.show("Al parecer te has desconectado!");
         }
      ]]>
   </mx:Script>
   <mx:HTTPService id="rss_hs" url="http://www.cristalab.com/rss.php" useProxy="false" method="POST" resultFormat="e4x"
      invoke="invoke(event)" fault="fault(event)" result="result_rss(event)"/>
</mx:WindowedApplication>


Tampoco hay un procesamiento del resultado, pues en este momento no es el tema.

Saludos y espero que les sirva! ^^

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate