酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windows PhoneでReminderを使って指定された時間にリマインダーを表示する

Windows Phone SDK 7.1から追加されました「リマインダー」と「アラーム」についてご紹介します。

アラームについての説明は、「Alarmを使って指定された時間にアラームを鳴らす」をご覧ください。

概要

アラームとリマインダーはそれぞれ、指定した時刻にスケジュールダイアログを起動します。また、週に1回や月に1回など定期的なスケジュールで起動させるようにすることもできます。

リマインダーは条件が満たされた場合、アプリケーション側で指定したタイトルとテキストコンテンツが表示されたダイアログを起動します。ユーザーがダイアログをタップすると、指定したアプリケーションの任意のページを起動することが出来ます。

名前空間:Microsoft.Phone.Scheduler

System.Object
 +–Microsoft.Phone.Scheduler.ScheduledAction
  +–Microsoft.Phone.Scheduler.ScheduledNotification
   +–Microsoft.Phone.Scheduler.Reminder

Tips

指定された時間にリマインダーを表示する

リマインダーをタップした時に起動するページを作成する

ソリューションエクスプローラーにてプロジェクトを選択して、右クリックしてメニューを表示します。[追加]、[新しい項目]の順に選択すると、新しい項目の追加ダイアログが表示されます。[Windows Phone 縦向きのページ]の項目を選択して、名前を「ReminderPage.xaml」とします。名前を入力したら[追加]ボタンを押してください。

OnNavigatedToメソッドでクエリ文字列を取得し、パラメータに「title」があれば値を取得してページのタイトルとして表示します。

using System.Windows.Navigation;
using Microsoft.Phone.Controls;

namespace AlermTest {
    public partial class RedminderPage : PhoneApplicationPage {
        public RedminderPage() {
            InitializeComponent();
        }

        protected override void OnNavigatedTo(NavigationEventArgs e) {
            // クエリ文字列にtitleが含まれていれば、
            // ページのタイトルとして表示する
            string title = string.Empty;
            if (NavigationContext.QueryString.TryGetValue("title", out title)) {
                PageTitle.Text = title;
            }
        }
    }
}

リマインダーの設定

リマインダー情報を作成してScheduledActionServiceクラスのAddメソッドを使用して、システムに新しいリマインダーを登録します。

private void btnReminder_Click(object sender, RoutedEventArgs e) {

    // 既にreminderという名前のリマインダー情報が存在しているかチェック
    if (ScheduledActionService.Find("reminder") != null) {
        // 既存のリマインダー情報を削除する
        ScheduledActionService.Remove("reminder");
    }

    var reminder = new Reminder("reminder");
    reminder.Title = "ユーザーへのリマインダー通知タイトル";
    reminder.Content = "リマインダーの通知コンテンツ";
    // 「リマインダーを通知を開始する時間」を今から1分後に設定する
    reminder.BeginTime = DateTime.Now.AddMinutes(1);
    // 「リマインダーが期限切れになる時間」を今から2分後に設定する
    reminder.ExpirationTime = DateTime.Now.AddMinutes(2);
    // 通知を繰り返すか、繰り返しの間隔を設定
    reminder.RecurrenceType = RecurrenceInterval.Daily;
    // タップされた時に開くページのUriを設定
    reminder.NavigationUri 
        = new Uri("/ReminderPage.xaml?title=" + reminder.Name, UriKind.Relative);
    
    ScheduledActionService.Add(reminder);
}

ScheduledActionServiceにリマインダー情報を登録後、1分後にリマインダー通知がされます。

タイトルとテキストコンテンツ辺りをタップすると、NavigationUriプロパティにて指定したページを開きます。


参照

関連記事