WinRT. 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. 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.

Nota: Recordar para quienes desarrollen también para Windows Phone o para quienes tengan curiosidad por comparar, que ya analizamos como verificar el estado de la conexión en Windows Phone en la siguiente entrada.

Como siempre solemos hacer vamos a realizar un ejemplo lo más simple posible pero que nos sea válida para lograr nuestros objetivos. La plantilla selecciona para realizar el ejemplo lo más simple posible será “Blank Application”.

Añadimos un simple botón en nuestra página principal (será el encargado de comprobar y notificar si tenemos conexión a internet o no):

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
     <Button Content="Verificar estado Conexión Internet" HorizontalAlignment="Center"/>
</Grid>

El resultado lo podéis ver a continuación:

En Windows 8 no tenemos disponible el método GetIsNetworkAvailable de la interfaz NetworkInterface. Sin embargo, dentro del namespace Windows.Networking.Connectivity tenemos disponible la clase NetworkInformation para poder realizar la misma tarea. Primero creamos una variable booleana publica y estática (la crearemos en App.xaml.cs) que nos indicara si hay conexión a internet (el valor de la variable será true) o no (el valor será false):

public static bool NetworkAvailable = true;

Podemos subscribirnos a un evento de la clase NetworkInformation ya mencionada llamado NetworkStatusChanged que se lanzará cada vez que hay cambios en la red (pasamos de tener internet a no tenerlo o viceversa):

NetworkInformation.NetworkStatusChanged += NetworkInformationNetworkStatusChanged;

En el evento:

/// <summary>
/// Se ejecuta cada vez que el estado de la conexión cambia.
/// </summary>
/// <param name="sender"></param>
void NetworkInformationNetworkStatusChanged(object sender)
{
     if (NetworkInformation.GetInternetConnectionProfile() == null)
          NetworkAvailable = false;
     else
          NetworkAvailable = true;
}

Hemos utilizado el método GetInternetConnectionProfile que nos indica el tipo de perfil utilizado por la aplicación. En caso de ser null, no tenemos conexión a internet.

Añadimos el evento Click del botón que añadimos al empezar el ejemplo:

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
     <Button Content="Verificar estado Conexión Internet" HorizontalAlignment="Center" Click="ButtonClick"/>
</Grid>

En el evento del botón verificaremos el valor de la variable publica y estática que creamos en el App.xaml para determinar si hay o no conexión a internet:

private async void ButtonClick(object sender, RoutedEventArgs e)
{
     if (App.NetworkAvailable)
     {
          //Hay conexión a Internet
          MessageDialog info = new MessageDialog("Hay conexión a Internet");
          await info.ShowAsync();
     }
     else
     {
          //No hay conexión a Internet
          MessageDialog info = new MessageDialog("No hay conexión a Internet");
          await info.ShowAsync();
     }
}

Si tenemos conexión a internet (la variable booleana NetworkAvailable es verdadera):

En caso contrario:

Puedes ver en video el resultado de nuestro ejemplo a continuación:

También, puedes descargar el ejemplo realizado:

Nada más en esta entrada. Recordar simplemente que cualquier tipo de duda o sugerencia la podéis dejar en los comentarios. Espero que lo visto os haya sido útil.

Más información

Un pensamiento en “WinRT. Verificar el estado de la conexión a Internet.

  1. Muy bien por estar al dia, solo una pregunta, (no he tenido tiempo de ponerme con Windows 8). En WP7 no se puede acceder a informacion como potencia de señal, etc. Y ya que te has atrevido en W8… ¿Sabes si en este caso se pueden obtener más datos sobre Wifi y 3G?

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