Hands-On Lab
为您的应用增加提醒机制
Lab version: 1.0.0
Last updated: 2/29/2012
内容
概述 3
实验 5
任务 1 –增加对提醒管理的支持 5
任务 2 –通过用户界面进行提醒管理 7
课程总结 12
概述
一些Windows® Phone应用程序需要把安排通知给用户;这里典型的情景是一个警报或一个即将来临的事件的提醒。
能够预定通知是Windows Phone Mango许多新特点之一。它预定通知的二种类型:警报(Alarm)和提醒(Reminder);警报允许你指定一个声音,当Notification被触发时。提醒允许你指定一个URI他将在点击提醒的时候执行。这就意味着,如果是会议提醒,URI可以指定一个本次会议的深层链接。当用户点击提醒,你的应用将导航到该提醒的URI并启动用户需要的页面。
本实验演示了如何使用Windows Phone Mango的 API为你的应用程序增加提醒。
目标
本次动手实验将帮助您完成下列目标:
• 添加提醒到你的Windows Phone应用程序中
前提条件
您在开始本次动手实验前,请先确认达到下列前提条件:
• Microsoft Visual Studio 2010 或者 Microsoft Visual C# Express 2010, 和 Windows® Phone 7 Codenamed “Mango” Developer Tools,下载地址: http://go.microsoft.com/?linkid=9772716
• 熟悉Windows Phone 7应用程序开发
实验提纲
这个动手实验将包括一个完整的实验,包括下列的任务:
1. 添加对提醒管理的支持
2. 通过用户界面管理提醒
预定完成时间
完成这个实验预计花费30 到 45 分钟时间。
实验
这个实验基于简单的应用程序。这个简单的应用程序允许用户管理任务,每个任务都要有一个截止日期。用户可以为每个任务添加提醒,提醒他们即将到期(或任何其他理由的提醒)。这个实验的起始点工程是没有提醒相关的功能的应用程序的副本。该工程文件包括在实验安装目录的Source\Begin目录下。实验完成后,您应该得到一个功能于Sources\End相同的版本。
任务1 – 添加对提醒管理的支持
虽然Windows Phone Mango提醒的API并不复杂,但特定任务的提醒可能仍然是笨重的。在此任务中,我们添加了一套方法,以协助我们管理应用程序的提醒。这些方法将演示如何使用Microsoft.Phone.Scheduler.ScheduledActionService类,管理提醒。
1. 打开这个起始点工程文件, Todo.sln, 该实验的起始点工程文件包括在实验安装目录的Source\Begin目录下。.
2. 检查解决方案,并找到TODO项目。展开项目的Misc文件夹并打开Utils.cs。此文件包含几个功能,包括目前为空的静态类RemindersHelper, 完成下面的步骤。
3. 在RemindersHelper 里增加以下方法:
C#
public static Reminder GetExistingReminder(Guid taskID)
{
Reminder reminder =
(Reminder)ScheduledActionService.Find(taskID.ToString());
return reminder;
}
在这个简单的应用里每个任务都有一个唯一的GUID。GUID标识与该任务相关的提醒。你可以检索于提醒相关的和具体任务通过使用ScheduledActionService类的 Find 方法 传入一个表示任务的字符串。
4. 另外增加一个方法来检查某个任务是否已成立了一个提醒
C#
public static bool HasReminder(Guid taskID)
{
if (ScheduledActionService.Find(taskID.ToString()) != null)
return true;
else
return false;
}
5. 添加一个移除任务提醒的方法(如果存在):
C#
public static void RemoveReminder(Guid taskID)
{
if (HasReminder(taskID))
ScheduledActionService.Remove(taskID.ToString());
}
再次注意, 为何 ScheduledActionService使用一个唯一的名称标识提醒。.
6. 最后, 添加一个方法,增加一个新的提醒并把它和任务联系起来:
C#
public static Reminder AddReminder(Task task, DateTime date,
bool removeOld = true, string body = null)
{
Guid taskID = new Guid(task.Id.ToString());
if (HasReminder(taskID))
{
if (removeOld)
RemoveReminder(taskID);
else
return null;
}
try
{
Reminder reminder = new Reminder(taskID.ToString());
reminder.Title = task.Title;
reminder.RecurrenceType =
Microsoft.Phone.Scheduler.RecurrenceInterval.None;
reminder.NavigationUri = UIConstants.MakeReminderUri(task);
reminder.Content = body;
reminder.BeginTime = date;
ScheduledActionService.Add(reminder);
return reminder;
}
catch (Exception e)
{
MessageBox.Show(e.Message);
return null;
}
}
在创建新的提醒之前,除非调用方指定,否则上面的代码首先尝试删除与该任务相关联的任何现有提醒。在调用者每次调用的时候,提醒被设置为只出现一次,并包含一个指定的文本信息。当点击的时候,这个提醒将更具一个查询的字符串参数导航到任务视图页面。
任务2 –通过用户界面处理提示
前面的任务奠定了提醒管理的基础,在此任务中,你会改变应用程序的接口,允许添加,删除和更新任务提醒。.
1. 编译并运行.
2. 创建一个新的任务,或点击一个现有的。.
3. 在任务视图中,你应该看到一个切换按钮添加或删除任务的提醒。该按钮,目前没有任何效果:
Figure 1
任务的视图与非功能提醒用户界面
提醒管理的UI(现在大部分被隐藏)已经实现,剩下唯一要做的就是正确地把它们联系在一起,我们通过修改ViewModel来实现
4. 检查 Todo 项目。
5. 展开项目的ViewModels 文件夹并打开 TaskEditViewModel.cs.
ViewModel由任务编辑器调用,我们会替换一些占位符以实现提醒管理
6. 找到TaskEditViewModel类中下的HasSystemReminder方法,改变它如下:
C#
public bool HasSystemReminder
{
get
{
return RemindersHelpers.HasReminder(task.Id);
}
}
上面的getter 只是简单的使用了 RemindersHelper 返回任务是否有一个提醒。
7. 找到IsReminderSettingsEnabled属性,让它的setter包含下面的代码:
C#
if (isReminderSettingEnabled != value)
{
isReminderSettingEnabled = value;
base.OnPropertyChanged("IsReminderSettingEnabled");
if (!isReminderSettingEnabled)
{
RemindersHelpers.RemoveReminder(task.Id);
ReminderDate = null;
ReminderTime = null;
ReminderContent = string.Empty;
OnPropertyChanged("HasSystemReminder");
}
}
这个setter清除当前任务的提醒,如果切换开关设置为OFF。
8. 找到InitializeReminder方法使用下面的代码片断改变它:
C#
void InitializeReminder()
{
//Cache the reminder to prevent too many lookups since a lot of fields
//need it
if (reminder == null && notSearchedForReminder)
{
reminder = RemindersHelpers.GetExistingReminder(task.Id);
notSearchedForReminder = false;
}
if (reminder != null)
{
reminderContent = reminder.Content;
reminderTime = reminder.BeginTime;
reminderDate = reminder.BeginTime;
IsReminderSettingEnabled = true;
}
}
上面的方法获取现有任务的提醒和初始化一些相应字段。这使得页面显示现有提醒的数据。
9. 用户界面将允许用户设置提醒的文本,日期和时间。我们需要一个方法,采取由用户提供的信息,并用它来创建一个当前任务的提醒,或更新其现有的提醒。使用下面的代码更改CheckAndSaveReminder方法:
C#
void CheckAndSaveReminder()
{
if ( HasValidReminder)
{
DateTime fullDate =
new DateTime ( ReminderDate.Value.Year,
ReminderDate.Value.Month,
ReminderDate.Value.Day,
ReminderTime.Value.Hour,
ReminderTime.Value.Minute,
ReminderTime.Value.Second );
if (DateTime.Now.AddMinutes(3) > fullDate)
{
MessageBox.Show(ApplicationStrings.ReminderNotFarEnough);
return;
}
RemindersHelpers.AddReminder(task, fullDate, true, ReminderContent);
OnPropertyChanged("HasValidReminder");
OnPropertyChanged("HasSystemReminder");
}
}
10. 编译并允许。您现在可以添加任务提醒,然后点击这个提醒将进入任务:
Figure 2
添加任务提醒
Figure 3
弹出的提醒
11. 这样就完成了实验室练习
课程总结
该实验已经向您展示了如何使用Windows Phone Mango的API添加提醒,在你与他们交互的时候如何加载一个特定页面。