MSDN España

Noticias, avisos, reflexiones... del equipo que hay detrás de MSDN en España... también tendremos alguna que otra firma invitada :)

Windows 8 Tips & Tricks. Detectar si una red es medida

Windows 8 Tips & Tricks. Detectar si una red es medida (C#)

[Nota: Este artículo pertenece a nuestra serie de Windows 8 Tips & Tricks]

 

Windows 8 se adentra de lleno en el campo móvil, lo que implica que los escenarios en los que los usuarios hacen uso de redes de telefonía de forma habitual aumentan enormemente. Como desarrolladores, debemos adaptar nuestras aplicaciones a estas nuevas situaciones y hacer un uso responsable de la red en función de la conexión de nuestros usuarios. En este Tips&Tricks veremos cómo detectar y adaptarnos a las redes medidas.

Windows 8 nos permite obtener de forma sencilla si el usuario está en una red sin restricciones o medida y de ser así, si se encuentra cerca de llegar al límite o si ya lo ha superado. Además, podemos comprobar si está haciendo Roaming, lo que probablemente le acarree más gastos.

Generalmente nuestras aplicaciones no se van a comportar de forma distinta para cada uno de los casos, sino que tendremos dos o tres comportamientos distintos en función de esas circunstancias (bajarse sólo el texto, reducir la frecuencia de actualización, etc…). En nuestro ejemplo vamos a definir tres tipos de comportamiento Heavy, Medium y Lightweight.

private enum NetworkBehaviour { Heavy, Medium, Lightweight };

Usaremos uno de estos tipos de comportamiento en función de las circunstancias de red, para ello hemos definido el siguiente método:

private NetworkBehaviour DefineNetworkBehaviour()
{
    var internetProfile = NetworkInformation.GetInternetConnectionProfile();
    var connectionCost = internetProfile.GetConnectionCost();
    //Comprobamos si se está haciendo Roaming
    if (connectionCost.Roaming) 
        return NetworkBehaviour.Lightweight;
    switch (connectionCost.NetworkCostType)
    {
            //La red no tiene costes adicionales
        case NetworkCostType.Unrestricted:
            return NetworkBehaviour.Heavy;
            //La red tiene un coste fijo
        case NetworkCostType.Fixed:
            //Comprobamos si nos estamos acercando al límite de transferencia
            if (connectionCost.OverDataLimit || connectionCost.ApproachingDataLimit)
                return NetworkBehaviour.Lightweight;
            return NetworkBehaviour.Medium;
            //La red tiene un coste variable
        case NetworkCostType.Variable:
            return NetworkBehaviour.Medium;
    }
    //Si no sabemos los costes, asumimos el peor escenario
    return NetworkBehaviour.Lightweight;
}

De este modo, cuando estemos a punto de realizar un consumo de red que pueda diferir en función del tipo de red, podemos llamar a DefineNetworkBehaviour, que nos devolverá Heavy si la red no tiene restricciones, Medium si la red se tarifica por consumo o es de consumo fijo y Lightweight si estamos acercándonos al límite de transferencia, si lo hemos superado o si desconocemos en qué red nos encontramos.

Si tienes alguna duda, recuerda que tienes a tu disposición el foro de desarrollo de aplicaciones para Windows 8 en castellano, donde podrás compartir tus conocimientos con la comunidad de desarrolladores y encontrar ayuda para resolver tus dudas técnicas, y una Introducción al desarrollo de aplicaciones para Windows 8.

También puedes estar al día de todas las novedades a través de nuestros rincones en las redes sociales:

Un saludo,

      Pablo Carballude