今回はAlarmManagerのアラームを使ってみたいと思います。
参照:Texh Boost
AlarmManagerは、アラームを作成するのに、必要な関数を持っているのですが、そのアラームを受け取るなどの動作はBroadcastReceiverが必要になります。
最初に、AlarmManagerのイベントのレシーバーを用意する。
public class SamopleReceive extends BroadcastReceiver { public void onReceive(Context context, Intent intent){ Toast.makeText(context, "hello world", Toast.LENGTH_SHORT).show(); } }
これでイベントが発生した場合に、「hello world」と出力をするレシーバーができた。
次に、AlarmManagerを利用してレシーバーにイベントを飛ばす関数を書きます。
//上記のクラスに投げる設定をする。
Intent i = new Intent(getApplicationContext(), SamopleReceive.class); PendingIntent sender = PendingIntent.getBroadcast(AlarmTest.this, 0, i, 0);
//現在時刻より15秒後に実行する宣言
Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.add(Calendar.SECOND, 15);
//セットする。
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
上記で、現在の時間より15秒後に「hello worldが出現する機能を作成できた。」
getBroadcastの第2引数はリクエストコードの為、基本的に0にしておけば問題ありません。
第4引数に関してですが、ここには、flagが入るのですが、PendingIntent.FLAG_UPDATE_CURRENTを入れてやると同じIntentがBroadCastされた場合、putExtraで格納したデータが更新されるようです。
参照:メモ帳
sender.setAction("任意の名前");
とすると任意のアクション名を渡す事ができます。
public class SamopleReceive extends BroadcastReceiver { public void onReceive(Context context, Intent intent){ Toast.makeText(context, intent.getAction(), Toast.LENGTH_SHORT).show(); } }
上記のように設定をする事により、設定したアクションの名前を取得する事ができるようになります。
※ここで、なぜアクションの名前を取れるようにする必要があるかと言うと、たとえば電源をつけた時のアクショ「Intent.BOOT_COMPLETED」や、スクリーンをつけた時のアクション「Intent.ACTION_SCREEN_ON」などさまざまなアクションのレシーバーとして利用ができるようになる為です。
public class SamopleReceive extends BroadcastReceiver { public void onReceive(Context context, Intent intent){ String _act = intent.getAction(); if(_act.equals(Intent.BOOT_COMPLETED)){ } } }
で、任意のアクションに対してのアクションをまとめて、書く事が可能になりました。
これで、キッチンタイマー的なものや、目覚まし時計的なものができるようになったはずです。
以上です。