日期:2014-05-17  浏览次数:20913 次

如何调用windows phone 7.1的后台闹钟功能 step by step

自从 WP7.1之后,windows phone 开放一些后台调用,包括音乐,闹钟,播放器等,相信在做windows phone开发时,有可能会调用后台, 恰好我们的软件工程中需要用到闹钟提醒功能,现在就把具体的细节一步一步告诉大家。

包括实现多项提醒,存储和显示等功能。

1. 简介

Reminder是我们Microsoft Academic Search (MAS) 的Windows Phone 7的一个应用的模块,用来提醒用户会议中每个session的开始。用户可以设置reminder的开始时间,结束时间,reminder的消息以及铃声,同时用户也可以删除已经存在的reminder。我需要做的就是提供创建和删除reminder的API,已经管理现有的reminders。下面我就谈一谈我在实现过程中的方法,遇到的困难,教训以及解决方案。

2. 如何在Memory中存储ReminderList

程序运行时,需要在内存中存储临时的ReminderList的信息。下面我谈谈这个部分我的经验与总结。

2.1. 数据结构

选择何时的数据结构是非常重要的。我一开始打算使用C#的Dictionary和Tuple,结果发现Windows Phone并不支持Tuple,于是我自己定义了一个class Tuple5并且把它用作Dictionary的Value的Type。Class Tuple5的代码如下:

 1 public class Tuple5<T1, T2, T3, T4, T5>
 2 {
 3     public T1 Item1 { get; set; }
 4     public T2 Item2 { get; set; }
 5     public T3 Item3 { get; set; }
 6     public T4 Item4 { get; set; }
 7     public T5 Item5 { get; set; }
 8 
 9     public Tuple5(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5)
10     {
11         Item1 = item1;
12         Item2 = item2;
13         Item3 = item3;
14         Item4 = item4;
15         Item5 = item5;
16     }
17 }

?

存储ReminderList的Dictionary的type如下:

Dictionary<uint, Tuple5<DateTime, DateTime, string, RecurrenceInterval, Uri>>

?

其中uint是我给每个Reminder分配的一个Universally Unique Identifier (UUID),Tuple5里面五个参数分别为Reminder的开始时间,结束时间,消息,重复响铃频率和声音文件的地址。这样我就可以用这个Dictionary来存储我们的ReminderList了。

2.2. 使用Windows Phone的Alarm

为了让我们的Reminder能在设定的时间响铃,我们使用了Windows Phone SDK 7.1的新功能——Alarm。我首先参考了MSDN官方的代码示例,地址如下:

http://msdn.microsoft.com/en-us/library/hh202965(v=vs.92).aspx

然后自己开始编写代码。下面我主要讲一下如何设置一个Alarm。

首先我们需要使用Windows Phone的scheduler的namespace,代码如下:

using Microsoft.Phone.Scheduler;

然后就是使用传进来的开始时间beginTime,结束时间stopTime,消息message,重复响铃频率recurrence和声音文件的地址sound来创建一个Alram对象并且加入Scheduler,代码如下:

1 Alarm alarm = new Alarm(name);
2 alarm.Content = message;
3 alarm.Sound = sound;
4 alarm.BeginTime = beginTime;
5 alarm.ExpirationTime = stopTime;
6 alarm.RecurrenceType = recurrence;
7 ScheduledActionSe