Hands-On Lab 为您的应用增加提醒机制



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添加提醒,在你与他们交互的时候如何加载一个特定页面。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值