Windows Phone 7 - Scheduled Notifications

Windows Phone 7 - Scheduled Notifications

 

在討論<Windows Phone 7 – Background Schedule Tasks>了解ScheduledTaskAgent幾個重要的元素與使用重點之後,

接下來針對另一個Scheulded Notification的使用。ScheduledTaskAgent繼承Background Agent類別實作了背景任務,

讓開發人員可以在背景情境下繼續處理指定的任務。然而,Scheduled Notification則是指定時間點,按照指定的通知

類型用於提示用戶。

 

這些功能都依賴著ScheduledActionService類別來加以控制,在上一篇也提過它是一個負責管理所有註冊在系統裡的

Notification或Scheduled Task,因此,透過該類別將指定的Notification類型加到系統中來做一個通知的功能。

 

Scheduled Notifications類別:

它用於允許Application註冊在前景畫面中依照設定觸發時間區段來彈出週期性或一次性的警告(alarm)或提醒(remember)的機制。

這樣的註冊動作主要是讓Application類似向WP7 OS排程了一個定期或一次性要觸發的事件,如同Outlook中定義的約會或工作週期,

等到時間到達或符合設定提醒的時間區段時,系統會自動彈出一個提醒(remember)或警告(alert)視窗通知用戶。

 

因此,接下來介紹這二種主要的類型:

 

A. Alarm:    IC531090

  呈現的型式:

‧Application Name:為建立該Alarm的應用程式名稱;
‧Alarm:為類型名稱,是固定的;

‧Alarm Content:為實際建立Alarm時所指定的Content訊息;

‧snooze:點擊後,將觸發應用程式設定復發時間,等待重新復發Alarm;

‧dimiss:點擊後,結束該Alarm;

‧Sound:指定需要的音效,呈現音效時將由音量小的聲音慢慢變大起來。

 

B. Reminder:    IC531091

呈現的型式:

‧Application Name:為建立該Alarm的應用程式名稱;
‧Reminder Tile:為應用程式建立Reminder時所指定的標題;

‧Alarm Content:為實際建立Reminder時所指定的Content訊息;

‧Snooze for:指定要延遲(貪睡)的時間長度;

‧snooze/dismiss:點擊後,均會啟動應用程式,或是應用程式指定的特定Page,

                               並且轉到特定Page時也可以使用QueryString夾帶參數;

‧Sound:Reminder採用預設的音效進行播放;

 

 

了解Alarm與Reminder二種類型之後,接下來針對如何使用這二者時幾個需要了解的屬性與類別加以說明:

‧ScheuldedNotifcation

   針對該類別不管在使用Alarm與Reminder時均會使用的屬性加以說明:

類別 屬性 說明
Reminder NavigationUri 設定/取得當Reminder執行時,用戶點擊snooze後前往應用程式指定的Navigation Uri。
Reminder Title 取得通知訊息的標題。
Alarm/Reminder Content 設定/取得通知的文字內文。
Alarm/Reminder BeginTime 設定/取得Action的排程啟動時間。
Alarm/Reminder ExpirationTime 設定/取得Action的排程到期時間。
Alarm/Reminder RecurrenceType 設定/取得通知的RecurrenceType類型。
Alarm Sound 設定/取得當Alarm執行要播放的聲音檔案。
Alarm/Reminder IsScheduled 取得Action的排程狀態。
Alarm/Reminder Name 取得Action的排程名稱。

 

RecurrenceInterval Enumeration

   指定ScheduledNotofication物件到期後,復發時間類型的列舉值。出現於ScheduledNotification類別的RecurrenceType屬性,

   復發的時間與BeginTime屬性會互相影響。常用於指定Alarm類型,當用戶指定Alarm物件時,透過指定該值讓用戶點擊snooze後,

   Alarm可以在指定的列舉時間抵達時進行復發。其列舉值如下:

列舉值 說明
None 不復發。Notificatin只依據BeginTime屬性設定的時間,發生一次即結束。
Daily 每一天復發。
Weekly 每一週復發。
Monthly 每一個月復發。
EndOfMonth 每一個月的月底復發。
Yearly 每一年復發。

 

以上說明了Scheduled Notification的一些重要屬性與元素,接下來將簡單舉個例子加以說明如何使用Scheduled Notification。

 

〉範例說明

a. 建立Alarm:

   1: private void btnAddAlarm_Click(object sender, RoutedEventArgs e)
   2: {
   3:     string tName = Guid.NewGuid().ToString();
   4:     DateTime tBgein = DateTime.Parse("2011/11/30 01:50");
   5:     DateTime tExpiration = DateTime.Parse("2011/11/30 03:00");
   6:     //建立Alarm物件
   7:     Alarm tAlarm = new Alarm(tName);
   8:     tAlarm.Content = "Show My Alarm content!!";
   9:     //tAlarm.Sound = new Uri("/Resources/Ring01.wma", UriKind.Relative);
  10:     tAlarm.BeginTime = tBgein;
  11:     tAlarm.ExpirationTime = tExpiration;
  12:     tAlarm.RecurrenceType = RecurrenceInterval.Daily;
  13:     //建立Alarm
  14:     ScheduledActionService.Add(tAlarm);
  15: }

b. 建立Reminder:

   1: private void btnAddReminder_Click(object sender, RoutedEventArgs e)
   2: {
   3:     string tName = Guid.NewGuid().ToString();
   4:     DateTime tBgein = DateTime.Parse("2011/11/30 01:54");
   5:     DateTime tExpiration = DateTime.Parse("2011/11/30 03:00");
   6:     //建立Reminder物件
   7:     Reminder reminder = new Reminder(tName);
   8:     reminder.Title = "Reminder custom title";
   9:     reminder.Content = "Remind to call me!!";
  10:     reminder.BeginTime = tBgein;
  11:     reminder.ExpirationTime = tExpiration;
  12:     reminder.RecurrenceType =  RecurrenceInterval.Daily;
  13:     reminder.NavigationUri = new Uri("/MainPage.xaml?key="+ tName, UriKind.Relative);
  14:  
  15:     ScheduledActionService.Add(reminder);
  16: }

 

[補充]

〉定義BeginTime與ExpirationTime的用法

    BegineTime:Reminder/Alert被觸發彈出的時間;(如:設定2011/12/10 10:00,那Reminder/Alert會在這時間啟動)

    ExpirationTime:Reminder/Alert整個被結束的時間;(如:設定2011/12/10 13:00,那Reminder/Alert會在此時退出ScheduleAction)

    也許有一個比較奇妙的地方就是RecurrenceType;(因為它與snooze / dismiess的用法讓人疑惑);

舉例來說:「BeginTime是:2012/02/18 10:30,ExpirationTime是:2012/02/20 11:00,那RecurrenceType = RecurrenceInterval.Daily。」

這代表:2/18, 2/19, 2/20三天在10:30都會觸發一次;

snooze呢?

該功能用途如同它的字義,在Reminder設定可以配合"snooze for"設定時間,往後移指定的時間;但指定的時間不會影響begin time的定義;

在Alert的話,則是直接配合預設的snooze時間往後,一樣不會影響beginTime設定的時間。

dimiss呢?

主要是結束目前Reminder/Alert被彈出這個Instance。跟ExpirationTime沒有直接關係。

======

這二個Scheduled Notification類型很常出現像是行事曆元件用於建立固定時間提示用戶相關的訊息,

或是鬧鐘等程式,讓用戶知道得到當下可能忘記的資訊。我覺得蠻容易使用的,只需要懂得二種類型的差異,

即可以做出很棒的效果。

 

References:

Alarms and Reminders for Windows Phone (重要)

Multi tasking in Windows Phone 7.1 (overview)

Windows Phone 7.1 Overview (2) – Background Agents

How to: Create Alarms and Reminders for Windows Phone

Alarms and Reminders Overview for Windows Phone

31 Days of Mango | Day #25: Background Agents Blankenblog

你不可不知的Mango — 开发者篇(1)

31 Days of Mango | Day #25: Background Agents

WP7: Live tiles with Background agents.

Implementing the Model-View-ViewModel Pattern in a Windows Phone Application (重要)

 

Dotblogs Tags: