domingo, 4 de marzo de 2012

Identificando el estado e información de la red en Windows Phone

Este es uno de esos post de referencia básica que nos puede ser útil en cualquier momento, además de que muestra una vez más lo muy sencillo que es el desarrollo sobre Windows Phone.

Parte de la experiencia de usuario en las aplicaciones, se encuentra en proporcionarle información sobre lo que sucede que la aplicación o lo que sucede con el dispositivo y que afecta nuestra aplicación, uno de esos datos es la información sobre los servicios de red, con la clase DeviceNetworkInformation del espacio de nombres Microsoft.Phone.Net.NetworkInformation.

Una aplicación disponible en el Marketplace y que se basa en estas funciones es Network Dashboard

Bien, hacerlo nosotros mismos es muy fácil con la clase DeviceNetworkInformation podemos determinar facilmente si la red local esta disponible, si el plan de datos celular local o via roaming está habilitado o si la red inalambrica está habilitada, para ello usamos lineas tan sencillas como las siguientes:

DeviceNetworkInformation.IsNetworkAvailable 
DeviceNetworkInformation.IsCellularDataEnabled DeviceNetworkInformation.IsCellularDataRoamingEnabled 
DeviceNetworkInformation.IsWiFiEnabled 

Tambien podemos conocer de forma fácil cual es el operador celular del teléfono, así:

DeviceNetworkInformation.CellularMobileOperator

También podemos monitorear los cambios en la disponibilidad de la red facilmente suscribiéndonos a el evento NetworkAvailabilityChanged de la clase DeviceNetworkInformation, así:

 DeviceNetworkInformation.NetworkAvailabilityChanged += new EventHandler<NetworkNotificationEventArgs>(ChangeDetected);  

He implementando la interpretación de los datos que arroja en el método que usamos para suscribirnos con un código como este:

 void ChangeDetected(object sender, NetworkNotificationEventArgs e)  
 {  
   string change = string.Empty;  
   switch (e.NotificationType)  
   {  
     case NetworkNotificationType.InterfaceConnected:  
       change = "Connected to " + e.NetworkInterface.InterfaceName;  
       break;  
     case NetworkNotificationType.InterfaceDisconnected:  
       change = "Disconnected from " + e.NetworkInterface.InterfaceName;  
       break;  
     case NetworkNotificationType.CharacteristicUpdate:  
       change = "Characteristics changed for " + e.NetworkInterface.InterfaceName;  
       break;  
     default:  
       change = "Unknown change with " + e.NetworkInterface.InterfaceName;  
       break;  
   }       
 }  

Para finalizar con otra de esas cosas fáciles de hacer en Windows Phone, existe una tarea que permite cambiar el estado de un tipo de conexión, es decir activa o desactivar el Modo Avión, Wifi, Bluetooth o Celular, así de sencillo:


Esta tarea lo que hace es abrir la el modo seleccionado para que el usuario lo encienda o apague, por ejemplo si seleccionamos Modo Avión veremos algo así:


En fin, espero que estas sencillas funciones les sirvan para complementar alguna de sus aplicaciones, hasta el próximo post.

Sorey

sábado, 3 de marzo de 2012

Mostrando la ubicación actual en un Mapa de Bing en Windows Phone

Después de haber configurado nuestra aplicación para poder usar Mapas de Bing y de tener en cuenta algunas consideraciones para el uso de los servicios de localización de nuestro dispositivo, vamos a aprender a marcar ubicaciones o locaciones en nuestros mapas usando Pushpins o marcadores.

El ejercicio consistirá en marcar nuestra ubicación con un color y un conjunto de coordenadas de sitios conocidos a nuestro alrededor.

Primero empezaremos entonces por declarar a nivel de nuestra página la clase GeoCoodinateWatcher a la instancia le daremos el nombre de watcher, luego de eso en el constructor creamos un nuevo objeto y nos suscribimos a los eventos PositionChanged y StatusChanged, esto debería generar el siguiente código:

 using System;  
 using System.Collections.Generic;  
 using System.Linq;  
 using System.Net;  
 using System.Windows;  
 using System.Windows.Controls;  
 using System.Windows.Documents;  
 using System.Windows.Input;  
 using System.Windows.Media;  
 using System.Windows.Media.Animation;  
 using System.Windows.Shapes;  
 using System.Device.Location;  
 using Microsoft.Phone.Controls;  
   
 namespace BingMaps.Demo  
 {  
   public partial class MainPage : PhoneApplicationPage  
   {  
     GeoCoordinateWatcher watcher;  
   
     // Constructor  
     public MainPage()  
     {  
       InitializeComponent();  
       watcher = new GeoCoordinateWatcher ();  
       watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);  
       watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged);  
     }  
   
     void watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e)  
     {  
       throw new NotImplementedException();  
     }  
   
     void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)  
     {  
       throw new NotImplementedException();  
     }  
   }  
 }  

Recuerda agregar el nivel de sensibilidad al que se someterá el servicio de localización, ya que esto determina cada cuanto se dispara el evento PositionChanged, para eso usamos la propiedad MovementThreshold, además no debemos olvidar invocar el método Start para iniciar el servicio de localización. El código del constructor quedaría así:

     // Constructor  
     public MainPage()  
     {  
       InitializeComponent();  
       watcher = new GeoCoordinateWatcher ();  
       watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);  
       watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged);  
   
       watcher.MovementThreshold = 20;
       watcher.Start();  
     }  

En este momento las dos suscripciones a los eventos no tienen implementación, están lanzando por defecto una excepción, limpiamos los dos métodos y vamos a implementar como obtener nuestra posición actual implementando el método asociado al evento PositionChanged. Para hacer que nuestra posición actual varie, vamos a declarar un marcador o pushpin a nivel de la clase justo al lado del watcher, asi;

     GeoCoordinateWatcher watcher;  
     Pushpin actualPosition;  

Y en el método asociado al evento PositionChanged vamos a controlar que este marcador no haya sido instanciado antes para removerlo del mapa y volverlo a instanciar para cambiarlo de posición. Aquí tengamos en cuenta si hemos dejado nuestro mapa tal cual como quedó al tomarlo del cuadro de herramientas, su nombre por defecto es map1, de otro buscamos cual es su nombre. El código de este método quedaría así:

     void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)  
     {  
       if (actualPosition != null)  
         map1.Children.Remove(actualPosition);  
   
       actualPosition = new Pushpin();  
       actualPosition.Location = e.Position.Location;  
       actualPosition.Content = "Me"; //Esta será la etiqueta del marcador
       map1.Children.Add(actualPosition);  
   
       map1.SetView(actualPosition.Location, 10); //El 10 es el zoom del mapa 
     }  

Si probamos en este momento veremos como la posición que simulemos en el emulador se muestra en el mapa


Para implementar el método StatusChanged vamos a crear en la pantalla 3 nuevos controles solo para efectos de este demo, yo sugeriría que se añadiera un botón de iniciar y uno de detener al Application Bar pero para aprender más del Application Bar, haré un post más adelante.


En MSDN hay un  código de referencia para implementar StatusChanged para efectos de este post lo tomaré tal cual, por lo que si lo están siguiendo recuerda recuerda nombrar los nuevos controles como los llaman en el código: statusTextBlock, startLocationButton y stopLocationButton.

     void watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e)  
     {  
       switch (e.Status)  
       {  
         case GeoPositionStatus.Disabled:  
           // The Location Service is disabled or unsupported.  
           // Check to see whether the user has disabled the Location Service.  
           if (watcher.Permission == GeoPositionPermission.Denied)  
           {  
             // The user has disabled the Location Service on their device.  
             statusTextBlock.Text = "you have this application access to location.";  
           }  
           else  
           {  
             statusTextBlock.Text = "location is not functioning on this device";  
           }  
           break;  
   
         case GeoPositionStatus.Initializing:  
           // The Location Service is initializing.  
           // Disable the Start Location button.  
           startLocationButton.IsEnabled = false;  
           break;  
   
         case GeoPositionStatus.NoData:  
           // The Location Service is working, but it cannot get location data.  
           // Alert the user and enable the Stop Location button.  
           statusTextBlock.Text = "location data is not available.";  
           stopLocationButton.IsEnabled = true;  
           break;  
   
         case GeoPositionStatus.Ready:  
           // The Location Service is working and is receiving location data.  
           // Show the current position and enable the Stop Location button.  
           statusTextBlock.Text = "location data is available.";  
           stopLocationButton.IsEnabled = true;  
           break;  
       }  
     }  

Recuerda además implementar el código de los dos nuevos botones

     private void startLocationButton_Click(object sender, RoutedEventArgs e)  
     {  
       startLocationButton.IsEnabled = false;  
       stopLocationButton.IsEnabled = true;  
       watcher.Start();  
     }  
     private void stopLocationButton_Click(object sender, RoutedEventArgs e)  
     {  
       startLocationButton.IsEnabled = true;  
       stopLocationButton.IsEnabled = false;  
       watcher.Stop();  
     }  

Y probar tu aplicación :D


Vamos a implementar además el poder cambiar el tipo de mapa que vemos, para esto vamos a habilitar el botón vista que tenemos en el Application Bar



Y en el código asociado podemos establecer el tipo de vista, por vista aérea o vista de calles.

En la vista aérea el mapa se vería así


No olviden que para los mapas de Bing también pueden usar Mapas Estáticos. Espero les haya sido útil

Sorey

Instalando Visual Studio Beta Express 11 en Windows 8 Consumer Preview

Ahora para empezar a desarrollar para Windows 8 vamos a instalar el Visual Studio Express 11, estos pasos debemos realizarlos después de completa los pasos para la instalación de Windows 8 Consumer Preview

Iniciamos la máquina vitual y en ella buscamos el inicio a Internet Explorer, no olvides tener conexión a internet disponible en la máquina para el proceso de instalación.


Al abrir Internet Explorer en la parte inferior encontraremos la barra de direcciones

Al dar un clic sobre ella la pantalla se pondrá de color negro y podremos observar algunos accesos directos, entre ellos el que nos llevará a la web con las herramientas que necesitamos descargar


En la web seleccionamos seguimos los enlaces que nos llevan a la zona de descarga de herramientas


Presionamos el enlace para descargar y en la parte inferior de la pantalla veremos el mensaje que nos permite ejecutar el archivo que se va a descargar


Así empieza nuestra instalación de Visual Studio 11 Beta Express para Windows 8


Esperamos a que se realice la descarga e instalación


Podremos lanzar el Visual Studio al finalizar la instalación


Y así estamos listos para empezar a construir nuestras aplicaciones con nuestro Visual Studio Express con estilo Metro no sin antes recordar que la licencia es únicamente de prueba y evaluación.


Para esto se nos solicita nuestro Live ID para obtener la licencia


Luego de eso se nos informa cual es la fecha de expiración de la licencia


En la página de descarga además encontrarán herramientas adicionales, como plantillas, ejemplos y SDKs para  aprender como desarrollar aplicaciones


Ya ven como es bastante fácil tener su ambiente de desarrollo, así que espero que se animen pronto a hacer sus propias aplicaciones.


Sorey

viernes, 2 de marzo de 2012

Instalando Windows 8 Consumer Preview en una máquina virtual

Saludos,

Esta serie de pasos seguro los encontrarán en muchos lados, pero bueno nunca está de más, entre otras estas son las cosas que me pasan instalando Windows 8 Consumer Preview en mi Sony VAIO con Windows 7 de 64 bits, Core i5 y 4 GB de RAM, usando una máquina virtual con Virtual Box, espero que a alguien le resulte de utilidad.

Lo primero que debemos hacer es descargar las ISO de Windows 8 Consumer Preview e instalar la última versión del Virtual Box, si ya lo tienen en sus máquinas les recomiendo reinstalarlo ya que en el último aparece soporte para Windows 8.

Si ya tienes instalado Windows 8 CP y quieres desarrollar aplicaciones Metro, instala el Visual Studio Express 2011.

Recuerda que la clave del producto para la instalación es:
DNJXJ-7XBW8-2378T-X22TX-BKG7J (Consumer Preview)
TK8TP-9JN6P-7X7WW-RFFTV-B7QPF (Release Preview)

Además los requisitos del sistema de Windows 8 CP son:
Procesador: 1 gigahercio (GHz) o más
RAM: 1 gigabyte (GB) (32 bits) ó 2 GB (64 bits) 
Espacio en disco duro: 16 GB (32 bits) ó 20 GB (64 bits)
Tarjeta gráfica: dispositivo gráfico Microsoft DirectX 9 o superior

Si vas a instalar directamente en disco, recuerda que Windows 8 funciona correctamente en los PCs sobre los que corra Windows Vista o Windows 7

Al abrir el Virtual Box, creamos una nueva máquina virtual y seleccionamos como sistema operativo Windows 8, en mi caso el de 64 bits.


Luego de ello seleccionamos la RAM, lo recomendado en 64 bits es 2 GB, sin embargo Virtual Box sugiere  poco más de 1.5 GB por defecto, yo coloqué lo máximo que me daba sin pasarme de la configuración optima sugerida (color verde)


Creamos el disco indicado por defecto


En el modo de creación seleccionamos dinámicamente


Y seleccionamos de que tamaño será el disco, recuerden que lo mínimo son 16 GB para instalar Windows 8, así que debemos separar más.


Se nos solicita confirmación de la creación del disco


Y se confirma la creación de la máquina virtual


Es así como vemos que la máquina quedó creada y podemos hacer algunos ajustes adicionales en la configuración.


Asignar más capacidad RAM si lo deseamos


Más capacidad de procesamiento


Y habilitar la virtualización


Además podemos asignar más recursos gráficos


Por último y para poder instalar asignamos a la unidad de CD/DVD la imagen ISO que descargamos al inicio.


Puede ocurrir que sus máquinas tiene la aceleración por hardware desactivada como en mi caso, así que cuando intenté ejecutar la máquina virtual recibí este mensaje:


Este equipo trae desactivada esta opción por que trae una máquina virtual de XP para trabajar con software viejo, debemos recordar que para usar esta máquina con XP debemos desactivar la aceleración por hardware y para usar Windows 8 debemos activarla, como les dejo en esta foto, yo la tenia desactivada en la BIOS


Si hemos hecho todo bien, la activamos y guardamos los cambios, y al iniciar nuevamente la máquina empezará la instalación y mostrará este bonito pez


Luego de eso seleccionaremos el idioma


Y procedemos a instalar


En este punto se nos pide el serial que les escribí al inicio del post


Luego de esto se nos pedirá seleccionar si deseamos actualizar o instalación avanzada, como la máquina virtual está limpia nos vamos por la segunda opción instalación avanzada y continuamos asignando el espacio a la partición que usaremos, que es el disco de nuestra máquina virtual.


Veremos el avance de la instalación, que no tarda mucho.


Al terminar la instalación podremos personalizar y establecer un nombre para nuestro PC


Luego asociamos nuestra cuenta de Live Id, si usamos la de nuestro teléfono Windows Phone tendremos todas nuestras cuentas asociadas listas en Windows 8, así que ojalá tengamos conexión a internet además


Y he aquí mi primer crash... la instalación se paró, pero reinicié la máquina virtual y empezó nuevamente desde la personalización del color y nombre de la máquina


Esto es todo lo que necesitamos, la máquina intenta recuperar nuestro datos de Windows Live


Nos confirma nuestra cuenta y nos pide iniciar sesión con nuestra clave


Y así finaliza la instalación


Entramos a la pantalla de bloqueo de Windows 8


Y estamos listos para comenzar a conocer Windows 8 Consumer Preview


Recuerda que  hay algunos requisitos adicionales para usar algunas características:
Para el uso táctil, necesitas una tableta o un monitor que sea compatible con una función
Multitouch. Para acceder a Windows Store y descargar y ejecutar aplicaciones, necesitas una conexión a Internet activa y una resolución de pantalla de al menos 1024 x 768.
Para acoplar aplicaciones, necesitas una resolución de pantalla de al menos 1366 x 768.

Espero que disfruten y aprendan mucho, por aquí estaré también compartiendo lo que aprenda.

Sorey

Actualización 2012/03/21: Para lograr que VirtualBox ocupe tu resolución de pantalla completamente con Windows 8 ejecuta esta instrucción por linea de comandos

C:\Program Files\Oracle\VirtualBox > VBoxManage.exe setextradata "Windows 8" "Cust
omVideoMode1" "1366x768x32"

Donde 1366x768 es la resolución que quieres y 32 el número de bits y Windows 8 es el nombre que le asignaste a tu máquina virtual.