[Libro] Windows Phone 7.5 Desarrollo de aplicaciones en Silverlight

Hola a todos!

Ayer fue un gran día, después de mucho trabajo y muchos sacrificios personales, por fin vio la luz el libro sobre Windows Phone 7.5 “Mango” que estaba escribiendo. Publicado con la inestimable ayuda de José Manuel Alarcón y Krasis Press, que han realizado un increíble trabajo de edición y preparación, muchas gracias!!. Lo que empezó poco a poco, finalmente se convirtió en 435 páginas de información sobre la nueva versión de Windows Phone:

portada_grande

El libro expone un recorrido completo por Windows Phone 7.5, desde su nacimiento, hasta como probar y publicar nuestras aplicaciones, pasando por el uso de los nuevos lanzadores y selectores, notificaciones push o apis de movimiento. Además he tenido la suerte de contar con Ibon Landa, uno de los mayores expertos en Windows Azure de España, para hacer un capítulo completo sobre la nube de microsoft y como aprovecharnos de ella en nuestras aplicaciones Windows Phone.

Junto con el libro podréis obtener los ejemplos completos, pequeñas aplicaciones ilustrando distintas situaciones, en total podréis descargar más de 100 ejemplos de código totalmente funcionales. desde una aplicación que rota imágenes al mover el teléfono hasta otra que consulta y muestra el catálogo de Netflix USA usando OpenData.

Podéis encontrar el libro en la tienda virtual de Krasis Press: http://www.campusmvp.com/Catalogo/Product-Windows-Phone-7.5-Mango—Desarrollo-Silverlight_142.aspx

Si queréis también podéis echarle un vistazo al índice completo de los 8 capítulos + apéndice y leer el primer capítulo gratuitamente en scribd: http://es.scribd.com/doc/66693271/Windows-Phone-7-5-Mango-Krasis-Press

Además gracias a Isabel Gómez de Microsoft, tenemos la suerte de poder regalar a los 50 primeros compradores del libro un cupón para registrarse como desarrolladores en el Marketplace de Windows Phone, durante un año, totalmente gratis. Con esto, el libro se paga solo!!

Espero que os guste, que disfrutéis leyéndolo tanto como yo he disfrutado escribiéndolo y que pronto pueda descargarme vuestras increíbles aplicaciones en mi Windows Phone.

Muchas gracias y Happy Coding!

Windows Phone 7.5: Tareas en segundo plano (1 de 2)

Hola a todos!

Con Windows Phone 7.5 tenemos acceso a nuevas apis que nos permiten desarrollar aplicaciones que traspasen su propio ciclo de vida. Esto es, aplicaciones que sean capaces de ejecutar código, o de dar avisos al usuario sin necesidad de estar iniciadas.

Esto lo logramos gracias al api de Acciones programas, que se divide en dos conceptos distintos: notificaciones programadas y tareas programadas. En este post vamos a examinar las primeras, las notificaciones programadas.

Notificaciones Programadas

Una notificación programada es, por poner ejemplos, el aviso que recibimos por parte de una alarma que hayamos establecido o el aviso de una cita del calendario. En su primera versión, Windows Phone, no nos permitía crear estos tipos de notificaciones. Con Windows Phone 7.5 esto cambia, teniendo un nuevo namespace: Microsoft.Phone.Scheduler, donde encontraremos los objetos necesarios para crear notificaciones.

Al igual que en el sistema, el namespace Microsoft.Phone.Scheduler expone dos tipos distintos de notificaciones programadas: alarmas y recordatorios.

Alarmas

Una notificación programada de tipo alarma nos permitirá programar su hora de inicio y valores como su periodicidad o un texto, además de poder especificarle un archivo de audio a reproducir. Para crear la alarma, usaremos el objeto Alarm de Microsoft.Phone.Scheduler:

Alarm alarma = new Alarm("Alarm_Gen");
alarma.BeginTime = DateTime.Now.AddSeconds(10);
alarma.ExpirationTime = DateTime.Now.AddDays(5);
alarma.Content = "Alarma programada";
alarma.RecurrenceType = RecurrenceInterval.Daily;
alarma.Sound = new Uri("alarma.mp3", UriKind.RelativeOrAbsolute);

La propiedad RecurrenceType, indica la periodicidad de la alarma, pudiendo elegir entre varios valores:

Tipo

Descripción

None

Solo se lanzará en la fecha/hora indicadas.

Daily

Se lanzará diariamente en la hora indicada.

Weekly

Se lanzará semanalmente en la hora indicada, el mismo día de la semana que el indicado. Si la primera vez la programamos un martes a las 18:00, se lanzará todos los martes a las 18:00

Monthly

Se lanzará mensualmente en el día del mes y hora indicados, si la primera vez la lanzamos el día 17 de julio a las 19:00, se lanzará todos los días 17 a las 19:00

Yearly

Se lanzará anualmente en el dia y hora indicados.

EndOfMonth

Se lanzará a la hora indicada el último día de cada mes.

Las propiedades BeginTime y ExpirationTime nos indicarán cuando se lanzará la alarma por primera vez y cuando caducará y no deberá lanzarse de nuevo. Debemos tener en cuenta que si hemos establecido la propiedad RecurrenceType en None, ExpirationTime no tendrá ningún efecto, pues la alarma solo se lanzará una vez.

Para añadir la alarma al sistema, usaremos la clase ScheduledActionService, que nos facilita métodos para buscar, añadir, eliminar o modificar alarmas. Lo primero que debemos hacer es comprobar si existe una alarma con el mismo nombre que estamos creando:

if (ScheduledActionService.Find("Alarm_Gen") != null)

Si existe, podemos decidir eliminarla y añadir nuestra nueva alarma:

ScheduledActionService.Remove("Alarm_Gen");

Es muy importante realizar esta comprobación, si intentamos añadir una alarma con un nombre que ya está registrado por otra, recibiremos una excepción InvalipOperationException.

Una vez que hemos configurado nuestra alarma y nos hemos asegurado de que no existe otra con el mismo nombre en el sistema, podemos añadirla:

ScheduledActionService.Add(alarma);

Si ahora esperamos el tiempo indicado podremos ver (y oír) nuestra alarma:

image

 

Recordatorios

Una notificación programada de tipo recordatorio. A diferencia del tipo alarma, el recordatorio no nos permite añadir un sonido para reproducir, pero nos da la opción de indicar la propiedad Title y la propiedad NavigationUri, es decir, podremos indicar una página con parámetros a la que deseamos que sea enviado el usuario al pulsar sobre el recordatorio.

Para crearlo, usaremos el objeto Reminder del namespace Microsoft.Phone.Scheduler:

Reminder recordatorio = new Reminder("Reminder_Gen");
recordatorio.Title = txtTitulo.Text;
recordatorio.Content = txtAviso.Text;
recordatorio.BeginTime = DateTime.Now.AddSeconds(int.Parse(txtInicio.Text));
recordatorio.RecurrenceType = RecurrenceInterval.None;

string rUri = string.Format("/pageReminder.xaml?Text={0}", txtTextParametro.Text);
recordatorio.NavigationUri = new Uri(rUri, UriKind.Relative);

Como podemos ver en este código, el único cambio es que en el objeto Reminder si podemos establecer la propiedad Title y que desaparece la propiedad Sound, sustituida por NavigationUri a la cual podemos indicar la uri de la página a la que deseamos llevar al usuario.

Al igual que en las alarmas, debemos comprobar que no exista un recordatorio con el mismo nombre que el que estamos creando o recibiremos una excepción InvalipOperationException.

if (ScheduledActionService.Find(txtNombre.Text) != null)
    ScheduledActionService.Remove(txtNombre.Text);

Si ya existe, eliminamos el existente para volver a crearlo usando el método Add de ScheduledActionService:

ScheduledActionService.Add(recordatorio);

Y Con esto ya tenemos nuestro recordatorio, si ejecutamos, podremos añadir uno nuevo y al pulsar sobre él nos llevará a la página que hayamos indicado:

image

 

Como podemos ver, es muy sencillo incluir esta funcionalidad en nuestra aplicación y nos abre la puerta a múltiples posibilidades, ¿A que esperas para crear una aplicación que use las notificaciones? A continuación podéis descargar el código fuente del ejemplo que se ve en las imágenes. Un saludo y Happy Coding!

[WP7] Aplicación Geeks.ms actualizada a Windows Phone 7.5

Hola a todos!

He aprovechado algo de tiempo libre para actualizar a Windows Phone 7.5 la aplicación de Geeks.ms. Si la tenéis instalada y vuestro Windows Phone está ejecutando Mango, os llegará una actualización, si no la tenéis instalada podéis hacerlo desde aquí:

Download-SPanish-Med

En esta nueva versión he aprovechado las nuevas funcionalidades que nos ofrece Windows Phone 7.5 e integrado las siguientes mejoras:

  • Fast Application Switching: Ahora cuando salgamos de la aplicación esta se conserva en memoria y se restaura automáticamente al punto donde la dejamos de forma instantánea.
  • Tiles secundarios: Cuando veamos un artículo que nos interesa, podemos anclarlo al menú inicio de nuestro teléfono como si se tratase de una aplicación con su propio Tile, que además nos ofrece información extra aprovechando que en Windows Phone 7.5 los Tiles tienen doble cara (frontal/trasera).
  • Redes sociales: Gracias a la integración de Twitter, LinkedIn y Windows Live dentro de Windows Phone 7.5 ahora podemos compartir un artículo que nos ha gustado con cualquiera de estas redes sociales directamente desde la aplicación, haciendo click en una opción del menú.

Veamos en detalle como se implementa cada una de estas opciones.

Fast Application Switching

En este caso lo único que tenemos que hacer es convertir el proyecto a Windows Phone 7.1, (No, no es una errata, el S.O. y el SDK son versión 7.1, el producto es Windows Phone 7.5) y automáticamente nuestra aplicación se beneficiará del cambio rápido incluido en el sistema.

Es recomendable que controlemos en el evento Application_Activated si nuestra aplicación llega desde el estado durmiente y si es así no realicemos la recuperación de datos desde el tombstoning, pues no es necesario:

// 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");
    }
}

Si queréis más detalles sobre el nuevo ciclo de vida de las aplicaciones en Windows Phone 7.5, mirad mi artículo anterior aquí.

Tiles secundarios

Esta es otra gran característica de Windows Phone 7.5 y, siguiendo la tónica general del sistema, increiblemente sencilla de implementar. En esta nueva versión una aplicación tiene un Tile principal, que es el que se ancla al inicio y ejecuta la aplicación al hacer tap sobre él. Pero la propia aplicación, a petición del usuario, puede generar nuevos Tiles, con imágen delantera y trasera, contenido y título totalmente personalizados y que apunte a una página en concreto y con unos parámetros, con lo que podemos realizar una especie de marcadores, por ejemplo, en la aplicación de geeks, podemos anclar un artículo al inicio para leerlo más tarde:

image

El código para hacer esto es realmente sencillo:

ShellTile tileSecundario;

tileSecundario = ShellTile.ActiveTiles.FirstOrDefault(t => t.NavigationUri.ToString().Contains(Context.Url.ToString()));

if (tileSecundario == null)
{
    StandardTileData tData = new StandardTileData()
    {
        BackgroundImage = new Uri(@"appdata:/secondarytile_front.png", UriKind.Absolute),
        Title = Context.Author,
        BackBackgroundImage = new Uri(@"appdata:/secondarytile_back.png", UriKind.Absolute),
        BackContent = Context.Title.Length > 40 ? Context.Title.Substring(0, 40) : Context.Title,
        BackTitle = "Geeks.ms"
    };

    ShellTile.Create(new Uri(string.Format(@"/ItemSelected.xaml?Url={0}", Context.Url), UriKind.Relative), tData);
}

Algo que tenemos que tener en cuenta es que las imágenes que usemos en los tiles secundarios deben estar incluidas en la aplicación como contenido y no como recurso.

Redes sociales

Como ya hemos dicho, Windows Phone 7.5 integra en el sistema Twitter, LinkedIn y Windows Live además de Facebook, y existen nuevos launchers que nos permiten compartir información con estas redes sociales, en la aplicación de Geeks.ms es muy sencillo:

image

Al presionar compartir aparecerá una pantalla donde podremos añadir un texto al enlace y seleccionar a que red social deseamos enviarlo y listo, compartido a nuestra red social de forma automática, el código es todavía más sencillo si cabe que el del tile secundario:

RssItem Context = (RssItem)this.DataContext;
ShareLinkTask share = new ShareLinkTask();
share.LinkUri = Context.Url;
share.Message = Context.Title;
share.Title = "Geeks.ms para Windows Phone 7.5";
share.Show();

Y con esto ya hemos visto las novedades incluidas en la aplicación de Geeks.ms para Windows Phone 7.5, como siempre, espero vuestro feedback y ya sabéis que aquí estoy para ayudaros en todo lo que pueda, no dudéis en contactar conmigo.

Un saludo y Happy Coding!