Este artículo es una traducción de Día 3: Alarms and reminders, puedes encontrar aquí la versión en inglés.

dia3

Hoy vamos a discutir como podemos configurar alarmas y recordatorios al usuario del dispositivo. Estos recordatorios pueden ser completamente manejados por nuestra aplicación, lo cual significa que nosotros podemos crear, editar y borrar los como sea necesario.

Como funcionan los Recordatorios

Los recordatorios en Windows Phone, son una forma de alertar a tu usuario que necesita hacer algo. Estas obvias aplicaciones de un recordatorio son un reloj de alarma, un calendario, una lista pendiente. Sin embargo, los recordatorios pueden ser utilizados en una variedad de aplicaciones, y son incluso una útil herramienta para recordarle a tu usuario que le de un ojo a tu aplicación. Aquí está una vista de un ejemplo de reminder que podrías lanzar en el teléfono de tu usuario:

 

image51

Como crear un recordatorio

Crear un recordatorio es relativamente simple. Tu creas un nuevo objeto de tipo reminder, clavarlo en las propiedades que son importantes para ti, y entonces agregarlo al SheduledActionService que corre en el teléfono. Debajo está el código fuente para un recordatorio. Después del código, te explicaré cada pieza en detalle.  Nota que yo he añadido una sentencia using adicional haciendo referencia a Microsoft.Phone.Scheduler.

 

using System;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Scheduler;

namespace Dia_3_Reminders
{
public partial class MainPage : PhoneApplicationPage
{
public MainPage()
{
InitializeComponent();

Reminder r = new Reminder(“recordatorioPrueba”);
r.Title = “Recordatorio de prueba”;
r.Content = “Recuerda visitar nuestra página”;
r.NavigationUri = new Uri(“/Recordatorio.xaml”, UriKind.Relative);
r.BeginTime = DateTime.Now.AddSeconds(15);
r.ExpirationTime = DateTime.Now.AddDays(7);
r.RecurrenceType = RecurrenceInterval.Daily;

ScheduledActionService.Add(r);
}
}
}

Nombrando un recordatorio

La primera línea del código de un recordatorio requiere que nombres tu recordatorio. En el ejemplo de arriba nosotros lo nombramos “recordatorioPrueba”. Cada recordatorio (y alarma, la cual cubriremos después) debe tener un nombre, y nosotros usaremos este nombre para administrar nuestros eventos en el futuro. Cada recordatorio/alarma debe tener un nombre único, así que mantén esto en mente mientras construyes tu aplicación. Si el nombre no es importante para ti, o no planeas administrar estos eventos, puedes usar un simple “timestamp” como nombre, lo cual debería garantizar un nombre único cada hora.

Nombre de la aplicación, título y contenido

Estos dos valores representan los mensajes que verás en el cuadro de texto que aparece en la pantalla del usuario. En la imagen de abajo, he etiquetado cada uno de los textos, así podrás saber exactamente como aparecerá tu texto.

textvalues1

Como puedes ver nosotros no tenemos ningún control sobre como será desplegado el texto, pero tenemos suficiente espacio para escribir en el. Si el usuario presiona en cualquier porción de estos valores de texto, nosotros tenemos la opción de llevarlo de vuelta a nuestra aplicación usando la propiedad NavigationUri.

NavigationUri

La NavigationUri es una ruta relativa a una página de tu aplicación. En nuestro código arriba, nosotros estamos enviando al usuario hacia Recordatorio.xaml. Este concepto esta referido como “deep linking”, y tu verás que es utilizado en muchas de las nuevas APIs que están disponibles para nosotros en Windows Phone 7.5. La habilidad de lanzar tu aplicación a una página será increíblemente valiosa para ambos, para ti y tus usuarios, y utilizar esta habilidad es altamente recomendado.

BeginTime, ExpirationTime y RecurrenceType

BeginTime es obviamente un valor muy importante, porque determina cuando nuestro recordatorio será lanzado en el dispositivo. Toma un valor de tipo DateTime, y hace el ExpirationTime. El valor  ExpirationTime no es requerido, pero se hace mas relevante y útil cuando nosotros agregamos el concepto de recurrencia a nuestros recordatorios. Quizá tu creas una aplicación que le recuerde al usuario checar sus niveles de sangre a la 1 PM cada día, pero solo quieres hacerlo por una semana. Puedes ajustar la propiedad ExpirationTime para que suceda una semana después del recordatorio inicial, y ajustarlo así RecurrenceType = RecurrenceInterval.Daily. Esto enviará el mismo recordatorio al usuario a la misma hora cada día. Para recordatorios múltiples por día, puedes crear muchos recordatorios en una sola vez. Esto al final te llevará al siguiente reto, administrar todos los recordatorios diferentes en el dispositivo.

Manejando tus recordatorios existentes

Crear un recordatorio es una tarea simple. Administrar muchos recordatorios y alarmas pues irse volviendo un tanto tedioso. Si tu has usado el código de ejemplo de arriba en tu propio proyecto, quizá hayas encontrado una InvalidOperationException que te diga que el recordatorio con ese nombre ya existe. Esta es la razón, cuando creas un recordatorio en el teléfono de tu usuario, es importante que cheques y te asegures que no lo hayas creado ya. Para hacer esto, podremos buscar por el nombre exacto de un recordatorio y borrarlo si es que ya existe. El código siguiente es exactamente el mismo que el anterior, excepto que yo checo ra ver si ya existe un recordatorio con el mismo nombre y borrarlo.

if (ScheduledActionService.Find(“recordatorioPrueba”) != null)
ScheduledActionService.Remove(“recordatorioPrueba”);

Reminder r = new Reminder(“recordatorioPrueba”);
r.Title = “Recordatorio de prueba”;
r.Content = “Recuerda visitar nuestra página”;
r.NavigationUri = new Uri(“/Recordatorio.xaml”, UriKind.Relative);
r.BeginTime = DateTime.Now.AddSeconds(15);
r.ExpirationTime = DateTime.Now.AddDays(7);
r.RecurrenceType = RecurrenceInterval.Daily;

ScheduledActionService.Add(r);

 

Esta habilidad para encontrar un recordatorio o alarma específicos se vuelve demasiado útil cuando necesitas editar o cambiar un recordatorio que ya hayas creado. Para editar un recordatorio, solo necesitas usar el método Find(), para crear una nueva referencia a el, y el método Replace() para guardar el cambio, como en el ejemplo siguiente:

 

if (ScheduledActionService.Find(“recordatorioPrueba”) != null)
{
Reminder r = ScheduledActionService.Find(“recordatorioPrueba”) as Reminder;
r.Title = “Tu información ha sido actualizada.”;
r.Content = “Este es el contenido actualizado.”;
r.BeginTime = DateTime.Now.AddSeconds(15);

ScheduledActionService.Replace(r);
}

 

Como crear una alarma

Las alarmas son prácticamente iguales a los recordatorios, con un par de excepciones. Primero, las alarmas no pueden especificar una propiedad de Title, y tampoco pueden usar la propiedad NavigationUri. Lo que sin embargo pueden hacer, es reproducir un sonido personalizado, algo que los recordatorios no pueden hacer. De ahí en fuera las alarmas y recordatorios son idénticos. Nosotros los administramos de la misma manera (usando el ScheduledActionService), el cual nos permite agregar, editar y borrarlos como sea necesario. Aquí está el código de ejemplo para crear una alarma, usando las lecciones ya aprendidas con los recordatorios.

if (ScheduledActionService.Find(“testalarma”) != null)
ScheduledActionService.Remove(“testalarma”);

Alarm a = new Alarm(“testalarma”);
a.Content = “Alarma de rutina”;
a.Sound = new Uri(“button-8.mp3″, UriKind.Relative);
a.BeginTime = DateTime.Now.AddSeconds(10);
a.ExpirationTime = DateTime.Now.AddDays(7);
a.RecurrenceType = RecurrenceInterval.Daily;

ScheduledActionService.Add(a);

Como puedes ver, incluso la sintaxis s idéntica al recordatorio. Para la propiedad de sonido, yo estoy haciendo referencia a un sonido que ya está incluido en el proyecto. El día 20 de mis 31 días de Silverlight cubre exactamente como incluir un archivo de audio en tu proyecto, e incluso como llamarlo desde un evento clic. Asegúrate de darle una leída si necesitas mas información al respecto.

Resumen

Para resumir, los recordatorios y alarmas son una gran forma de notificar al usuario que el tiempo de hacer algo ha llegado. Dado que son muy similares, es importante recordar que los recordatorios te permiten dar un link de regreso a tu aplicación, incluso a una página específica, si es lo que necesitas. Esta es una efectiva e importante forma de que el usuario se fije en tu aplicación, y que le hagas mucho mas fácil encontrar lo que necesitan.

Para ver una aplicación completa que use todo el código y conceptos de este artículo, descarga el proyecto siguiente.

Descarga aquí el código.

Mañana te guiaré en un nuevo sensor sensor disponible en Windows Phone: La brújula. Incluso te mostraré como los imanes pueden afectarle dramáticamente. Nos vemos.