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クライアントのようなアプリで、一定時間に自分宛のメッセージが無いか確認する、というような使い方もできると思います。
RTCとRTC_WAKEUPの説明が逆になってませんか?
私の認識違い?
コメント有難う御座います。
確認したところ、おっしゃる通り、逆となっていました。
誤った情報を載せてしまい、申し訳御座いません。
ご指摘、誠に有難う御座います。