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:
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:
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!
Hola a todos! En el post anterior vimos como trabajar con una parte del api de Acciones Programadas:
Vamos con una segunda retahíla de enlaces relacionados con Windows Phone 7.5 (Mango). En este caso y