Windows Phone 7.5: Liberada RC de las herramientas y aceptación de aplicaciones

Hola a todos!

Cada vez está más cerca la nueva versión de Windows Phone y muestra de ello es que ya tenemos las herramientas en su versión RC (Release Candidate) disponibles para descarga aquí:

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=27153

Si ya estamos en RC, ¿Por que sigue conservando la versión 7.1? Bueno, La versión de sistema operativo real de Mango será la 7.1 y las herramientas son, del mismo modo, la versión 7.1, pero de cara al nombre de producto, es más pegadizo Windows Phone 7.5 que Windows Phone 7.1, indica un salto mayor y más significativo, lo que significa que Windows Phone 7.5 es solo un nombre de producto, la versión real del S.O. y herramientas será la 7.1.

Además, desde ayer día 22 de Agosto de 2011 ya podemos enviar al Marketplace de Windows Phone aplicaciones compiladas para Windows Phone 7.5, pero… ¡Solo un 4% de los usuarios de Windows Phone cuentan con la nueva versión!

Tranquilidad, en Microsoft han pensado en el coste de transición y han ideado lo siguiente:

Cuando enviemos al Marketplace una nueva versión de nuestra aplicación compilada para Windows Phone 7.5, se guardará la última versión compilada para 7.0. De forma transparente, si accedemos al marketplace con un terminal 7.0 descargaremos la versión 7.0 de nuestra aplicación, si por el contrario accedemos con un terminal 7.5, descargaremos la versión 7.5 de la aplicación, sin tener que seleccionar ni preocuparnos, será el marketplace el encargado de darnos la versión adecuada.

Pero… ¿Vale la pena actualizar?

En principio, mi estrategia sería corregir bugs y estabilizar rápidamente una última versión 7.0, porque una vez que enviemos la primera versión 7.5, no podremos enviar más versiones 7.0. Una vez que hayamos enviado esta versión estable y con corrección de Bugs (O si ya lo habíamos hecho anteriormente) Simplemente convertiría el proyecto a Windows Phone 7.5, esto es muy sencillo, abrimos el proyecto 7.0 en una maquina con las herramientas 7.1 instaladas, nos vamos a las propiedades del proyecto y en la pestaña de Application podremos seleccionar el sistema operativo deseado:

image

Es importante hacer un backup de nuestro proyecto antes de convertirlo.

Simplemente seleccionamos Windows Phone OS 7.1, nos avisará de que el cambio es irreversible, aceptamos y recompilamos… voila! Ya tenemos nuestro proyecto convertido a Windows Phone 7.5. Si usáis el Windows Phone Silverlight Toolkit, podéis obtener una versión actualizada para Windows Phone 7.5 en CodePlex, en el sitio del proyecto: http://silverlight.codeplex.com, solo necesitáis descargar e instalar el nuevo Toolkit y actualizar las referencias a las correctas de Agosto 2011.

Pero… No he cambiado nada de mi aplicación ¿Para que demonios hago todo esto entonces?

Es importante hacer esto por una gran razón: FAST APP SWITCHING o en la lengua de cervantes: CAMBIO DE APLICACIÓN RÁPIDO. Solo con compilar nuestra aplicación para Windows Phone OS 7.1 tendremos acceso a esta característica pero, ¿Qué significa?

Se ha modificado el ciclo de vida de las aplicaciones para incluir un estado durmiente:

ciclovida

En Windows Phone 7.5 cuando nuestra aplicación se desactiva, no se cierra directamente, se queda en un estado durmiente, el sistema conservará la aplicación en memoria mientras no necesite memoria para abrir nuevas aplicaciones y operar con normalidad, esto significa que debemos seguir realizando el Tombstoning, pero ahora, al recuperarnos y recibir el evento Application_Activated deberemos comprobar si la aplicación viene del estado durmiente, de ser así, no tendremos que recuperar el estado, pues la aplicación se restaurará completamente al estado anterior, para comprobar esto usaremos la propiedad IsApplicationInstancePreserved de la clase ActivatedEventArgs:

// Code to execute when the application is activated (brought to foreground)
// This code will not execute when the application is first launched
private void Application_Activated(object sender, ActivatedEventArgs e)
{
    if (e.IsApplicationInstancePreserved)
        return;

    if (PhoneApplicationService.Current.State.ContainsKey("data"))
    {
        SampleData.Personas = (List<Persona>)PhoneApplicationService.Current.State["data"];

        PhoneApplicationService.Current.State.Remove("data");
    }
}

Con esta simple comprobación ya tendremos nuestra aplicación preparada para Windows Phone 7.5 y todos los usuarios que tengan esta versión de Windows Phone agradecerán mucho el poder beneficiarse de esta característica del sistema en nuestras aplicaciones.

Un saludo y Happy Coding!!

Windows Phone 7.5: Nuevos launchers & choosers

Hola a todos!

Seguimos dando un repaso a las novedades definitivas que vamos a encontrar en Windows Phone 7.5 (Mango). En esta ocasión vamos a echar un vistazo a los nuevos launchers & choosers que nos ofrece la nueva versión de Windows Phone!

BingMapsDirectionTask

Este lanzador abre la aplicación de Bing Maps instalada en nuestro dispositivo y muestra una ruta entre dos puntos que le hayamos indicado.

Si solo indicamos uno de los puntos (el de inicio o el de destino) Bing Maps usará nuestra posición actual como el punto contrario y trazará la ruta correspondiente. Para especificar los puntos usaremos objetos LabeledMapLocation, los cuales nos permiten especificar una etiqueta para el punto y las coordenadas geográficas del punto.

Lo primero que necesitamos hacer es añadir una referencia al ensamblado System.Device en nuestro proyecto y un using del namespace System.Device.Location y Microsoft.Phone.Tasks en nuestra clase.

Ahora solo necesitamos crear los objetos LabeledMapLocation para el punto inicial y final de la ruta:

LabeledMapLocation puntoInicial;
LabeledMapLocation puntoFinal;

puntoInicial = new LabeledMapLocation()
{
    Label = "Inicio",
    Location = new GeoCoordinate(43.26132332170895, 
                                    -2.927180528640747)
};
puntoFinal = new LabeledMapLocation()
{
    Label = "Final",
    Location = new GeoCoordinate(43.26890938831908, 
                                    -2.934046983718872)
};

En este caso hemos creado una ruta que nos lleva desde la estación de tren de Bilbao al museo Guggenheim, si hubiésemos omitido el punto inicial la ruta se habría calculado desde nuestra posición hasta el museo Guggenheim.

A continuación, creamos una nueva instancia del lanzador BingMapsDirectionsTask, establecemos los puntos de inicio y fin:

BingMapsDirectionsTask mapRoute = new BingMapsDirectionsTask();
mapRoute.Start = puntoInicial;
mapRoute.End = puntoFinal;
mapRoute.Show();

BingMapsTask

Nos permite lanzar la aplicación de Bing Maps, establecer el nivel de Zoom, un término de búsqueda por defecto y unas coordenadas en las que centrar el mapa.

Al igual que en BingMapsDirectionsTask, necesitaremos añadir una referencia al ensamblado System.Device y un using al namespace System.Device.Location y Microsoft.Phone.Tasks en nuestra clase.

BingMapsTask map = new BingMapsTask();

map.Center = new GeoCoordinate(43.26303437089185,
                                -2.9349589347839355);

map.ZoomLevel = sliderZoom.Value;
map.SearchTerm = "Museo Guggenheim, Bilbao";

map.Show();

SearchTask

Lanza la aplicación de búsqueda con el término de búsqueda que hayamos indicado:

SearchTask search = new SearchTask();

search.SearchQuery = "Plain Concepts";
search.Show();

ShareLinkTask

Nos permite compartir un enlace (url), con un mensaje y título asociados en las redes sociales que soporta Windows Phone 7.5:

ShareLinkTask shareLink = new ShareLinkTask();

shareLink.Title = "Blog";
shareLink.LinkUri = new Uri("http://www.geeks.ms/blogs/jyeray);
shareLink.Message = "Un buen blog, con muchos recursos de wp7";
shareLink.Show();

Al ejecutarlo, aparecerá un cuadro de selección donde podremos elegir donde queremos compartir el enlace, en Twitter, LinkedIn, Facebook, por correo electrónico o mensaje de texto.

ShareStatusTask

Parecido a ShareLinkTask, este lanzador nos permite actualizar nuestro estado en las diferentes redes sociales que soporta Windows Phone 7.5:

ShareStatusTask shareStatus = new ShareStatusTask();
shareStatus.Status = "Actualizando mi estado!!";
shareStatus.Show();

 

SaveContactTask

Este selector mostrará un diálogo al usuario que nos permitirá guardar un nuevo contacto con los datos que indiquemos. Este selector no devuelve ningún dato, pero podemos manejar el evento Completed para comprobar si se ha guardado correctamente o no el contacto.

Vamos a diseñar una página que nos permita introducir nombre, empresa, teléfono y correo electrónico de un nuevo contacto (SaveContactTask admite todos los campos disponibles en un contacto de Windows Phone, escogemos estos de forma representativa) y que contenga un botón que ejecute el selector:

private void btnCrear_Click(object sender, RoutedEventArgs e)
{
    SaveContactTask saveTask = new SaveContactTask();

    saveTask.Completed += new EventHandler<SaveContactResult>(saveTask_Completed);
    saveTask.FirstName = txtNombre.Text;
    saveTask.Company = txtEmpresa.Text;
    saveTask.WorkPhone = txtTelefono.Text;
    saveTask.WorkEmail = txtEmail.Text;

    saveTask.Show();
}

Una vez que haya terminado el selector recibiremos el evento Completed, donde podremos comprobar si se ha guardado correctamente:

void saveTask_Completed(object sender, SaveContactResult e)
{
    if (e.TaskResult == TaskResult.OK)
        MessageBox.Show("Contacto guardado.");
}

SaveRingtoneTask

Este selector representa una de las novedades más esperadas en Windows Phone 7.5, poder incluir tonos personalizados en el teléfono. Con este selector podremos crear nuestra propia aplicación que instale tonos nuevos en el teléfono.

Antes de comenzar, debemos tener en cuenta ciertas restricciones en el tipo de archivo de audio a usar:

  • Los archivos deben ser MP3 o WMA.
  • Deben tener una duración inferior a 40 segundos.
  • No pueden tener DRM.
  • Deben tener un tamaño menor a 1Mb

Como en otros selectores, el evento Completed nos devolverá el resultado de la operación, pero además el método Show puede producir y devolver excepciones, como por ejemplo InvalidOperationException si el archivo de sonido indicado no existe.

A la hora de indicar la localización del archivo a usar como tono de llamada, podremos aprovecharnos de los nuevos esquemas Uri que incluye Windows Phone 7.5, de esta forma, podremos usar isostore:/nombre_tono.mp3 para acceder a un tono que se encuentre en el almacenamiento aislado de nuestra aplicación y appdata:/nombre_tono.mp3 para acceder a un tono que se encuentre incrustado en nuestra aplicación como contenido.

En primer lugar, añadimos un using de Microsoft.Phone.Tasks y creamos una nueva instancia de SaveRingtoneTask con la que trabajar.

En la interface de usuario tendremos un textBox con el que podremos personalizar el nombre que recibirá el tono en el sistema y un botón que ejecutará este chooser:

private void btnSetTone_Click(object sender, RoutedEventArgs e)
{
    SaveRingtoneTask saveTone = new SaveRingtoneTask();
    saveTone.Completed += 
        new EventHandler<TaskEventArgs>(saveTone_Completed);
    saveTone.DisplayName = txtDisplayName.Text;
    saveTone.IsShareable = true;
    saveTone.Source = new Uri("appdata:/tone.mp3");
    saveTone.Show();
}

En este caso estamos usando el esquema uri appdata:/ que indica que el archivo está almacenado en el directorio de instalación de nuestra aplicación. Una propiedad interesante de este selector es IsShareable, que indica si deseamos permitir que otras aplicaciones accedan a este tono. Una vez que ejecutemos la aplicación, y presionemos el botón, el sistema nos pedirá que confirmemos la instalación del tono.

En el evento Completed recibiremos el resultado de la operación:

void saveTone_Completed(object sender, TaskEventArgs e)
{
    if (e.TaskResult == TaskResult.OK)
        MessageBox.Show("Tono instalado ok");
    else if (e.TaskResult == TaskResult.Cancel)
        MessageBox.Show("Cancelado por el usuario.");
}

Lamentablemente solo lo podremos usar con archivos de audio dentro de nuestro isolated storage o copiados junto a nuestra aplicación, no podremos acceder a la librería multimedia de Zune en el teléfono.

Y esto ha sido todo por hoy, un saludo, gracias por leerme y Happy Coding!!

[MATERIALES] Evento Windows Phone: A New Hope

Hola a todos!

wpmango

Este pasado día 26 de julio estuve en Santander dando una charla de Windows Phone junto a Rafael Serna y Juan Carlos Gonzalez. Hablamos de la historia de Windows Phone, su presente y su futuro más inmediato en forma de Windows Phone 7.5, incluso pudimos hacer una demo de como establecer tonos de llamda personalizados y demás novedades de Windows Phone 7.5

P7260035

La verdad es que lo pasamos muy bien, aprendimos mucho, pude juguetear con una Surface y hacer una visita a las oficinas del CIIN y SDM Programas y después de reponer fuerzas con una buena comida,  pasamos una tarde genial por Santander!

Os dejo los materiales de la charla y las demos! Un saludo y Happy Coding!