Windows Phone. Verificar el estado de la conexión a Internet.

Gran cantidad de las aplicaciones que desarrollemos necesitarán en mayor o en menor medida de una conexión a Internet para obtener la información. Evidentemente, debemos garantizar el correcto funcionamiento de la aplicación a la hora de trabajar con la conexión de datos pero no debemos descuidar el funcionamiento de la misma cuando no contamos con una conexión activa. En estas situaciones, podremos esforzanos en mayor o en menor medida. Como mínimo deberemos detectar la falta de conexión e informar al usuario. Podemos mejorar la situación cacheando la información cuando tenemos conexión para poder mostrar la última información que obtuvimos. Todo lo necesario para cachear la información (uso del Isolated Storage) lo veremos con todo lujo de detalles en próximas entradas. En esta entrada vamos a centrarnos en otro punto también vital para poder realizar todo lo mencionado y no es más que una forma rápida y sencilla para detectar si tenemos o no conexión a Internet.

El SDK de Windows Phone viene preparado para permitirnos detectar el estado de la conexión de una forma sumamente sencilla. Dentro del namespace System.Net.NetworkInformation tenemos la clase NetworkInterface que nos permite facilmente comprobar si hay conexión de la siguiente forma:

if (NetworkInterface.GetIsNetworkAvailable())
{
    // Hay conexión.
}
else
{
    // No hay conexión.
}

Hemos utilizado el método GetIsNetworkAvailable de la clase NetworkInterface que devuelve un simple booleano indicandonos si hay o no conexión a internet. Podemos crear un simple método como el siguiente:

private bool IsNetworkAvailable()
{
     if (NetworkInterface.GetIsNetworkAvailable())
          return true;
     else
          return false;
}

El método anterior visto tiene un pequeño problema. Si estamos realizando pruebas desde el emulador posiblemente el método anterior siempre devuelva true, es decir, siempre hay conexión. Sin embargo, podemos utilizarlo perfectamente ya que en dispositivos físicos funciona perfectamente. Podemos realizar en el método anterior una pequeña modificación para poder realizar las pruebas necesarias:

private bool IsNetworkAvailable()
{
#if DEBUG
     return false;
#endif

     if (NetworkInterface.GetIsNetworkAvailable())
          return true;
     else
          return false;
}

Continuamos. Tenemos distintos medios para estar conectados a Internet con nuestro dispositivo (3G, WiFi, etc). Podemos detectar la forma en la que estamos conectados gracias a la clase NetworkChange (también dentro del namespace  System.Net.NetworkInformation). Esta clase contiene el evento NetworkAddressChanged. Este evento se lanza cada vez que la red de conexión cambia. Para detectar el tipo de red utilizaremos la propiedad NetworkInterfaceType que es una enumeración que nos facilita mucho el trabajo (recomiendo echarle un vistazo a los posibles valores de la enumeración en el siguiente enlace).

NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(NetworkChange_NetworkAddressChanged);

 

void NetworkChange_NetworkAddressChanged(object sender, EventArgs e)
{

}

Por lo tanto, podemos utilizar otra forma para detectar si tenemos conexión a internet gracias a la enumeración NetworkInterfaceType:

private bool IsNetworkAvailable()
{
     if (Microsoft.Phone.Net.NetworkInformation.NetworkInterface.NetworkInterfaceType == NetworkInterfaceType.None)
          return false;
     else
          return true;
}

Esta último método visto es perfectamente funcional también en el emulador. Sin embargo, el método GetIsNetworkAvailable es a nivel de rendimiento mucho más eficiente. Por lo que sigue siendo totalmente recomendable su uso.

Espero que lo visto en la entrada o sea de utilidad. Como siempre, cualquier tipo de duda podéis dejarla en los comentarios de la entrada.

Más información

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s