アラーム機能を使用する


今回はWindowsPhone7の標準のアラーム機能の利用方法をご紹介します。

アラームというのは指定した時間に音を鳴らしてユーザに時間が来たことを知らせる機能です。
WP7では標準でユーザが指定した音源で指定した時間に音を鳴らすAlarmクラスが用意されています。

今回は以下の内容についてご紹介します。

  • アラームの設定
  • アラームをセットする

詳しい内容は続きを御覧ください。

アラームの設定

アラームは3点のことが設定できます。
時刻の設定、音源の設定、テキスト(アラームの目的)の設定の3点です。
それぞれAlarmクラスの下記のプロパティで設定できます。

[table “195” not found /]

BeginTimeの例として現在時刻の1分後を指定したい場合は下記のように書きます。

1
BeginTime = DateTime.Now.AddMinutes(1.0)

ここでのDateTimeでは現在時刻を取得しAddMinutesで1分後を指定しています。

ここでセットするDateTimeは下記のページをご参照ください。
DateTime

次にアラームの音源を設定するにはSoundプロパティに音源のパスをセットします。
例えば相対パスのalarm.wavの音源で音楽を流したい場合は下記のようにUriを設定します。

1
Sound = new Uri("alarm.wav", UriKind.Relative)

最後にアラームにはテキストについてです。
このテキストはアラームを鳴らした際にこのアラームは何を目的にして鳴らしているのかを書きます。
テキストの表示する内容は下記のプロパティに文字列を入れます。
実際は下記のように書きます。

1
Content = "1分後にアラーム"

以上の3点でアラームの設定ができます。

アラームをセットする

アラームをセットするにはScheduledActionServiceを利用します。
ScheduledActionServiceはOSに対してスケジュールされたアクションを登録したり、削除したりすることができます。

ScheduledActionServiceのよく利用するメソッドは表のようになります。
[table “193” not found /]

addでアラームをセットしremoveでアラームを止めます。

今回はアラームを1分後にセットして鳴らすサンプルを用意しました。
■MainPage.xaml

1
2
3
4
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <Button Content="AlarmStart" Height="72" HorizontalAlignment="Left" Margin="244,6,0,0" Name="button1" VerticalAlignment="Top" Width="206" Click="button_click" />
    <TextBlock Height="72" HorizontalAlignment="Left" Margin="9,6,0,0" Name="textBlock1" Text="TextBlock" VerticalAlignment="Top" Width="229" />
</Grid>

■MainPage.xaml.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public partial class MainPage : PhoneApplicationPage
{
    private DispatcherTimer mTimer;
    private int mTime = 60;
 
    // コンストラクター
    public MainPage()
    {
        InitializeComponent();
        textBlock1.Text = mTime.ToString();
 
    }
 
    public void button_click(object sender, RoutedEventArgs e)
    {
        mTime = 60;
        mTimer = new DispatcherTimer();
        mTimer.Interval = TimeSpan.FromMilliseconds(1000); //1秒間隔に設定
        mTimer.Tick += new EventHandler(TickTimer);
        textBlock1.Text = mTime.ToString();
        mTimer.Start();
        SetAlarm();
    }
 
    private void SetAlarm()
    {
        if (ScheduledActionService.Find("Alarm") != null)
            ScheduledActionService.Remove("Alarm");
 
        var alarm = new Alarm("Alarm")                    //アラームの名前
        {
            BeginTime = DateTime.Now.AddMinutes(1.0),     //現在時刻の1分後
            Content = "1分後にアラーム",                  //テキスト 
            Sound = new Uri("alarm.wav", UriKind.Relative)//音楽ファイル指定
        };
        ScheduledActionService.Add(alarm);
    }
 
    void TickTimer(object sender, EventArgs e)
    {
        if (mTime <= 0)
        {
            mTimer.Stop();
            return;
        }
        mTime -= 1;
        textBlock1.Text = mTime.ToString();
    }
}

30行目でアラームの生成しプロパティに時刻、音源、テキストを設定しています。
そしてnewをする際にはアラームの名前を設定します。
作成したアラームを36行目でOSに登録して時間が来たらアラームを起動してもらいます。

もしすでに登録していて重複を避けるには28行目のコードのように同じ名前のアラームが設定されている場合にアラームを解除することで対処することも出来ます。

このサンプルコードを実行すると下図のようにボタンが表示され、左側の数字が秒を表しています。
ボタンを押すと左側の数字がカウントダウンを始め、1分間をカウントします。
カウントダウンはDispatcherTimerを使って定期実行をするをご参照ください。

そして1分間経つと下図のような画面が表示され指定した音源が流れます。

2 Comments