mucchinのAndroid戦記

Androidアプリのアラーム機能

Androidアプリでめざまし時計のようなアラーム機能を実装する方法はないの?

Androidアプリでは、そのAndroidアプリが起動していない状態でも、指定した時刻にそのAndroidアプリを起動させることができるアラーム機能があります。
仕様用途としては、文字通り目覚まし時計のような使い方もできますし、ある決まった時間になんらかのサーバへ接続させる、というような事もできます。


単純にアラームを設定する簡単な例を説明します。
アラームの設定時は、まず、AlarmManagerというアラームを司るマネージャのインスタンスを取得します。

AlarmManager mng =
 (AlarmManager)getSystemService(Context.ALARM_SERVICE);

あとはこのマネージャのset()メソッドを使って、アラームを設定するだけです。
AlarmManager.set()の使い方について説明します。
このAlarmManager.set()の第一引数には、起動時間の設定方法を、AlarmManagerクラスの定数で指定します。
以下の4つの定数が用意されています。

AlarmManager.ELAPSED_REALTIME

電源ON時からの経過時間の値で指定します。

AlarmManager.ELAPSED_REALTIME_WAKEUP

電源ON時からの経過時間の値で指定します。もしスリープモードに入っている場合は電源を入れてくれます。

AlarmManager.RTC

時刻で指定します。

AlarmManager.RTC_WAKEUP

時刻で指定します。もしスリープモードに入っている場合は電源を入れてくれます。


スポンサーリンク




AlarmManager.set()の第二引数には、起動時間を設定します。
第一引数に設定した起動方法によって、意味が異なります。

ELAPSED_REALTIME or ELAPSED_REALTIME_WAKEUPの場合

SystemClock.elapsedRealtimeが示す値を指定します。
電源ONしてからの経過時間の事です。

RTC or RTC_WAKEUPの場合

System.currentTimeMillisが示す値を指定します。
現在時刻の事です。


第三引数には、アラーム起動時に発行させるIntentを設定します。
具体例としては、下記のようなサンプルコードになります。
//アラームマネージャの取得
AlarmManager mng =
 (AlarmManager)getSystemService(Context.ALARM_SERVICE);

//GregorianCalendarの生成
GregorianCalendar calendar;
calendar = new GregorianCalendar();

<GregorianCalendarの設定処理は省略>

//発行するIntentの生成
Intent i =
 new Intent(getApplicationContext(),AlarmCheckActivity.class);
PendingIntent pi = PendingIntent.getActivity(this, 0, i, 0);

//Alarmをセット
mng.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);


一部抜粋ですが、上記のような感じで、アラームを設定できます。

あとは応用次第ですね。

単に目覚まし時計のように使うだけでなく、例えばTwitterクライアントのようなアプリで、一定時間に自分宛のメッセージが無いか確認する、というような使い方もできると思います。