¿Quieres registrarte?

Detectar la conexión a internet desde una aplicación AIR

Por: Zguillez
5 de Diciembre del 2009
7273 de clabLevel
Otros artículos de Zguillez
1,219 visitas

Cómo hace tiempo que no escribo ningún tip, aquí va uno de AIR. Se trata de cómo detectar si disponemos de conexión de internet al ejecutar una aplicación AIR.

Esta comprobación es muy sencilla ya que disponemos de una clase de actionscript especifica para realizarla. La clase URLMonitor.

Al instanciar la clase URLMonitor de deberemos pasarle como parámetro un URLRequest con una dirección web válida con la que realizar la comprobación de la conexión a internet.

Código :

var _urlForRequest:URLRequest = new URLRequest("http://www.cristalab.com");
var _monitor:URLMonitor = new URLMonitor(_urlForRequest);


Una vez iniciado el URLMonitor, este lanzará un evento cada vez que detecte cambios de conexión.

Código :

_monitor.addEventListener(StatusEvent.STATUS, onStatusChange);
_monitor.start();


La disponibilidad de conexión a internet quedará guardada en un parámetro booleano dentro del objeto que podremos recuperar y actuar en consecuencia.

Código :

function onStatusChange(e:StatusEvent):void
{
   if(_monitor.available == true)
   {
      //loquesea
   }
   else
   {
      //loquesea
   }
}


Este evento se disparará siempre que haya un cambio en el estado de la conexión, con lo que podremos detectar si perdimos la conexión (o la recuperamos) durante la ejecución de nuestra aplicación, y evitar así posibles fallos de funcionamiento.

Enviar a twitter Enviar a facebook


También te interesa


Etiquetas air internet ria

Comentarios | Enviar un comentario
excelente post gracias me sirvio

gracias
Por: tecmobeto
Esta es una pregunta complicada.

He visto aplicaciones en el mundo .NET que son conscientes del status de la conexión a Internet. Para no ir lejos, MSN Messenger se desconecta inmediatamente cuando deja de estar disponible la red. Ellos se enteran a través de un API de Windows que indica cuando estas cosas pasan a través de un evento.

Aquí, veo que usas una URL y una clase que "monitorea" el status de la URL. ¿Eso significa que está haciendo ping a esa URL cada X tiempo? ¿Cada cuanto tiempo? Si no hace ping cada X tiempo ¿Cómo dispara el evento? ¿Hay más datos de cómo se comporta? Es un tema que siempre me interesó.
Por: Freddie
Z muy bueno! y así como las preguntas de Freddie, sumo la de si no hay algo más a nivel hard o soft(windows) para saber si se tiene conexión, quizás serviría también el hecho de que quizás no tenés conexión a internet pero estás dentro de una LAN.
Se entendió? es parecido a lo que pregunta F.

Saludos!
Por: Raxiro-blog
Soy un bestia cuando dije soft"(windows)", si yo lo odio también grr!, Linux, Mac, etc! el que sea.
Por: Raxiro-blog
muy buen tip.
hace tiempo lo había visto. Pero esta mejor explicado y en español.
Saludos
Por: bubudrc

Freddie :

Aquí, veo que usas una URL y una clase que "monitorea" el status de la URL. ¿Eso significa que está haciendo ping a esa URL cada X tiempo? ¿Cada cuanto tiempo? Si no hace ping cada X tiempo ¿Cómo dispara el evento? ¿Hay más datos de cómo se comporta? Es un tema que siempre me interesó.

El URLMonitor hace un ping a esa url unicamente después de haber llamado a start() y cuando cambia el estado de la red (accediendo a la información del sistema).

Pero tambien hay la posibilidad de ir lanzando pings continuamente de forma periódica con la propiedad pollInterval, indicándole el número de milisegundos en el que quieres repetir la comprobación. Esta propiedad por defecto es 0 con lo que no se envía ninguno.

Código :

_monitor.pollInterval = 5000;

Raxiro-blog :

quizás serviría también el hecho de que quizás no tenés conexión a internet pero estás dentro de una LAN.

Si estas en una red local puedes hacerlo igualmente con:

Código :

new URLRequest("http://localhost")

pero en este caso el URLMonitor no detecta los cambios de red, tendrías que ir haciendo pings continuamente con pollInterval para detectar cambios en el estado del servidor.
Por: Zguillez

Zguillez :

Si estas en una red local puedes hacerlo igualmente con:

Código :

new URLRequest("http://localhost")

pero en este caso el URLMonitor no detecta los cambios de red, tendrías que ir haciendo pings continuamente con pollInterval para detectar cambios en el estado del servidor.
localhost siempre va a responder el ping, porque es el PC local. Me imagino que para una LAN hay que hacer ping a una IP conocida dentro de la red.
Por: Freddie
muy bueno!
Por: leobaraldi
gracias x las respuestas Z!
Por: Raxiro-blog

Freddie :

localhost siempre va a responder el ping, porque es el PC local. Me imagino que para una LAN hay que hacer ping a una IP conocida dentro de la red.

Localhost devuelve true o false dependiendo de si tienes conectado o desconectado Apache
Por: Zguillez

Zguillez :

Freddie :

localhost siempre va a responder el ping, porque es el PC local. Me imagino que para una LAN hay que hacer ping a una IP conocida dentro de la red.

Localhost devuelve true o false dependiendo de si tienes conectado o desconectado Apache
¿Estás seguro de esto? Entonces URLMonitor revisa el puerto 80 de la IP, más que si esta está conectada a internet o no. No es exactamente un ping.

Igual, no serviría localhost para saber si hay internet en la red local, sólo para saber si apache está corriendo en tu PC.

Interesante funcionamiento.
Por: Freddie
hos a funcionado??? ami me da 4 errores. ya pa comenzar me dice que No se encontró la definición air.net.URLMonitor. lo importo asi: import air.net.URLMonitor; lo ago mal? y bueno los 3 mensages siguientes debe ser a consecuencia... buaaa y con la ayuda de adobe pasa lo mismo... el as3 es lokos. Dejo el codigo aqui por si alguien ve lo que ago mal. saludos

///////////////////////////

import flash.net.URLRequest;
import flash.events.StatusEvent;
var _urlForRequest:URLRequest=new URLRequest("http://www.cristalab.com");
var _monitor:URLMonitor=new URLMonitor(_urlForRequest);
_monitor.addEventListener(StatusEvent.STATUS, onStatusChange);
_monitor.start();
function onStatusChange(e:StatusEvent):void {
if (_monitor.available==true) {
//loquesea
} else {
//loquesea
}
}

/////////////////////////////////
Por: troyar
me deje import air.net.URLMonitor; en el anterio post... lo siento.
Por: troyar
se me olvido import air.net.URLMonitor; en la primera linea de codico de el post de arriba. disculpen.
Por: troyar
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.