Hoy vamos a mirar el nombre de espacio de NetworkInformation en el SDK 7.1 de Windows Phone. Este conjunto de APIs nos da una abundante información en el dispositivo relacionada a si disponibilidad de conexiones, su tipo y más.
Si quieres descargar la aplicación de ejemplo de este artículo a tu Windows Phone, está disponible en el Windows Phone Marketplace.
¿Qué es el nombre de espacio NetworkInformation?
Simplemente es una colección de clases para Windows Phone que de dará una tonelada de información acerca de la conectividad de red de un dispositivo específico. Hay dos secciones de este espacio de nombres en las que vamos a enfocarnos.
DeviceNetworkInformation – Un conjunto de propiedades que nos permite checar que una conexión esta habilitada en el dispositivo del usuario.
NetworkInterfaceList – Una lista actual de todas las redes que a las que el usuario se ha conectado. Esto incluye su operador (carrier) como redes inalámbricas.
Aunque haya obvias razones para saber acerca de la conectividad del usuario, he escuchado algunas formas muy interesantes para usar esta información en tu aplicación. Por ejemplo, pensar en una aplicación que administre algún tipo de examen académico. No quieres que el usuario sea capaz de usar internet para responder a las preguntas, de modo que puedes detectar que el teléfono no tiene ninguna conexión de red. O quizá has tenido una aplicación que permita al usuario descargar nuevos e-books. Sabiendo si el usuario tiene una conexión quizá avise al usuario que necesita conectarse a internet antes de poder explorar su catálogo.
Usando DeviceNetworkInformation
DeviceNetworkInformation es un conjunto de cinco valores de tipo cadena o booleano que podemos utilizar para determinar que tipos de conectividad de red tiene disponibles el usuario. Una lista y descripción de cada uno de estos valores es la que sigue.
CellularMobileOperator (string) Te da el nombre del proveedor de celular al cual el dispositivo está conectado.
IsNetworkAvailable (boolean) El valor mas común que utilizarás, solo determina si el dispositivo tiene conectividad de red. No determina el acceso a internet, solo que el teléfono está conectado a una red.
IsCellularDataEnabled(boolean) Muestra si el teléfono del usuario tiene o no acceso a datos.
IsCellularDataRoamingEnabled (boolean) Muestra si el usuario está permitiendo roaming o no, esta propiedad es generalmente mostrada como falsa de manera preestablecida.
IsWifiEnabled(boolean) Determina si el dispositivo tiene o no Wifi activada.
NetworkAvailabilityChanged Este es un manejador de eventos que podemos usar para reconoces un cambio en la conectividad de red del dispositivo.
Para comenzar a construir nuestra aplicación, he mantenido la interfaz increíblemente simple en esta ocasión. Solo vamos a agregar un TextBlock, dentro de un control ScrollViewer. Si has estado construyendo aplicaciones junto a los artículos previos, conoces como está la cosa entonces. El siguiente XAML va para tu MainPage.xaml
<phone:PhoneApplicationPage
x:Class=”Dia_10_Redes.MainPage”
xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”
xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”
xmlns:phone=”clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone”
xmlns:shell=”clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone”
xmlns:d=”http://schemas.microsoft.com/expression/blend/2008″
xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006″
mc:Ignorable=”d” d:DesignWidth=”480″ d:DesignHeight=”768″
FontFamily=”{StaticResource PhoneFontFamilyNormal}”
FontSize=”{StaticResource PhoneFontSizeNormal}”
Foreground=”{StaticResource PhoneForegroundBrush}”
SupportedOrientations=”Portrait” Orientation=”Portrait”
shell:SystemTray.IsVisible=”True”>
<Grid x:Name=”LayoutRoot” Background=”Transparent”>
<Grid.RowDefinitions>
<RowDefinition Height=”Auto”/>
<RowDefinition Height=”*”/>
</Grid.RowDefinitions>
<StackPanel x:Name=”TitlePanel” Grid.Row=”0″ Margin=”12,17,0,28″>
<TextBlock x:Name=”ApplicationTitle” Text=”LA LIGA SILVERLIGHT” Style=”{StaticResource PhoneTextNormalStyle}”/>
<TextBlock x:Name=”PageTitle” Text=”redes” Margin=”9,-7,0,0″ Style=”{StaticResource PhoneTextTitle1Style}”/>
</StackPanel>
<Grid x:Name=”ContentPanel” Grid.Row=”1″ Margin=”12,0,12,0″>
<ScrollViewer>
<TextBlock x:Name=”txtContenido” FontSize=”20″ />
</ScrollViewer>
</Grid>
</Grid>
</phone:PhoneApplicationPage>
Estaremos escribiendo todos nuestros valores a ese TextBlock en esta aplicación, así no estaremos visitando constantemente a la UI. Algo de hecho aburrido, pero bueno, vamos a enfocarnos en el propósito de este artículo el cual es utilizar C# para determinar las capacidades de red de nuestro dispositivo.
En el ejemplo de abajo verás que registro el manejador del evento NetworkAvailabilityChanged en el método MainPage() y luego agrupo todos los valores de la clase DeviceNetworkInformation. Puedes usar este código en tu archivo MainPage.xaml.cs
using System;
using System.Text;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Net.NetworkInformation;
namespace Dia_10_Redes
{
public partial class MainPage : PhoneApplicationPage
{
public MainPage()
{
InitializeComponent();
DeviceNetworkInformation.NetworkAvailabilityChanged += DeviceNetworkInformation_NetworkAvailabilityChanged;
ObtenerDatos();
}
private void ObtenerDatos()
{
StringBuilder info = new StringBuilder();
if (DeviceNetworkInformation.CellularMobileOperator != null)
info.AppendLine(“operador: ” + DeviceNetworkInformation.CellularMobileOperator.ToLower());
info.AppendLine(“red: ” + DeviceNetworkInformation.IsNetworkAvailable.ToString());
info.AppendLine(“roaming: ” + DeviceNetworkInformation.IsCellularDataRoamingEnabled.ToString());
info.AppendLine(“datos: ” + DeviceNetworkInformation.IsCellularDataEnabled.ToString());
info.AppendLine(“wifi: ” + DeviceNetworkInformation.IsWiFiEnabled.ToString());
info.AppendLine();
txtContenido.Text = info.ToString();
}
void DeviceNetworkInformation_NetworkAvailabilityChanged(object sender, NetworkNotificationEventArgs e)
{
ObtenerDatos();
}
}
}
Si has estado siguiendo el código junto al artículo, podrás correr tu proyecto en este punto. Verás una pantalla que se asemeje a la imagen de abajo si usas el emulador de Windows Phone.
En la siguiente sección, vamos a mirar a la NetworkInterfaceList, la cual contiene información acerca de cada una de las redes a las que el dispositivo está actualmente conectado.
Usando la NetworkInterfaceList
La NetworkInterfaceList contiene una lista de cada una de las redes individuales a las que el usuario está conectado. Esto incluye redes inalámbricas, redes de celular e incluso la conexión Ethernet que Windows Phone usa cuando está conectado a la PC.
En nuestro ejemplo, vamos a ver a la lista entera de redes, pero debido que NetworkInterfaceList es de tipo IEnumerable, puedes acceder de la forma que mas te guste utilizando LINQ. En el código de abajo, verás que miro a través de la lista completa, escribiendo cada una de ellas en la pantalla que el usuario puede ver siempre y cuando esté conectado a ella. He incluido el método GetData() del ejemplo anterior, así que asegúrate de reemplazarlo en el código que estés escribiendo.
private void ObtenerDatos()
{
StringBuilder info = new StringBuilder();
if (DeviceNetworkInformation.CellularMobileOperator != null)
info.AppendLine(“operador: ” + DeviceNetworkInformation.CellularMobileOperator.ToLower());
info.AppendLine(“red: ” + DeviceNetworkInformation.IsNetworkAvailable.ToString());
info.AppendLine(“roaming: ” + DeviceNetworkInformation.IsCellularDataRoamingEnabled.ToString());
info.AppendLine(“datos: ” + DeviceNetworkInformation.IsCellularDataEnabled.ToString());
info.AppendLine(“wifi: ” + DeviceNetworkInformation.IsWiFiEnabled.ToString());
info.AppendLine();
foreach (var n in new NetworkInterfaceList())
{
info.AppendLine(n.InterfaceName.ToLower());
info.AppendLine(n.InterfaceType.ToString());
info.AppendLine(n.InterfaceState.ToString());
info.AppendLine();
}
txtContenido.Text = info.ToString();
}
Usando el emulador, obtendrás todas las redes listadas en tu aplicación.
En un dispositivo real, obtendrás cerca de 4 redes en tu lista. Por ejemplo, en el mío, tengo una conexión inalámbrica, la conexión de internet de mi operador, la conexión mms de mi operador y la interfaz de conexión loopback de mi software (de la cual puedes leer más aquí).
En resumen
Hoy, mostré el nombre de espacio de NetworkInformation, y como podemos usarlo en nuestras aplicaciones para determinar si un dispositivo esta conectado a una red, o en algunos casos, no conectado.
Si quieres descargar el ejemplo completo de la aplicación creada en este ejemplo, puedes hacerlo en el siguiente enlace.
Puedes descargar el código aquí.
Mañana, vamos a echarle un vistazo a los Live Tiles y como podemos crearlos y editarlos desde nuestras aplicaciones ahora. Nos vemos.
