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!

2 comentarios sobre “Windows Phone 7.5: Tareas en segundo plano (1 de 2)”

Responder a anonymous Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *