今回はWindowsPhone7の標準のアラーム機能の利用方法をご紹介します。
アラームというのは指定した時間に音を鳴らしてユーザに時間が来たことを知らせる機能です。
WP7では標準でユーザが指定した音源で指定した時間に音を鳴らすAlarmクラスが用意されています。
今回は以下の内容についてご紹介します。
- アラームの設定
- アラームをセットする
詳しい内容は続きを御覧ください。
アラームの設定
アラームは3点のことが設定できます。
時刻の設定、音源の設定、テキスト(アラームの目的)の設定の3点です。
それぞれAlarmクラスの下記のプロパティで設定できます。
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を使って定期実行をするをご参照ください。