アラーム機能を使用する


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

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

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

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

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

アラームの設定

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

[table “195” not found /]

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

BeginTime = DateTime.Now.AddMinutes(1.0)

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

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

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

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

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

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

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

アラームをセットする

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

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

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

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

<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

    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