android 指定した時間に処理をさせる AlarmManager
今回は、androidのAlarmManagerについて書きます。
AlarmManagerを使うと、指定した時間に処理をさせることができます。
例えば、「10秒後にトースト(Toast)を出す」や「1分後にアラートダイアログ(AlertDialog)を表示させる」などのことができます。
導入方法を書く前に、AlarmManagerの動作を軽く書きます。
流れは、N秒が経過したら、インテントで指定しているクラスを実行するというものです。
なので、MainActivityの他に、もう一つクラスがいります。
では、導入方法を書きます。
①受け手となるクラスを作る
まず、AlarmManagerによって呼び出されるクラスを作ります。
public class AlarmReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { //処理の内容 Toast.makeText(context, "2秒後です", Toast.LENGTH_SHORT).show(); } }
このように作ります。
クラス名は、なんでもいいです。(今回は、AlarmReceiverにしました。)
②AlermManager
今度は、MainActivity内にコチラ↓を書きます。
public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); /*---追加---*/ // AlarmReceiverを呼び出すインテントを作成 Intent i = new Intent(getApplicationContext(), AlarmReceiver.class); // ブロードキャストを投げるPendingIntentの作成 PendingIntent sender = PendingIntent.getBroadcast(MainActivity.this, 0, i, 0); Calendar calendar = Calendar.getInstance(); // Calendar取得 calendar.setTimeInMillis(System.currentTimeMillis()); // 現在時刻を取得 calendar.add(Calendar.SECOND, 2); // 現時刻より2秒後を設定 // AlramManager取得 AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); // AlramManagerにPendingIntentを登録 am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender); /*---追加---*/ } }
※「AlarmReceiver.class」や「MainActivity.this」などは、適宜変えてください。
③AndroidManifestに追加
最後に、コチラをAndroidManifestに追加します。これがないと動かないので、忘れないように。
<receiver android:name=".AlarmReceiver" android:process=":remote" />
※「.AlarmReceiver」は、適宜変えてください。
以上で、導入は終わりです。
ここからは、上のプログラムを少し補足します。
②の「RTC_WAKEUP」ですが、
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
これは、起動時間をどのように設定するかの指定ができます。
指定方法は、これらがあります。
- ELAPSED_REALTIME ・・・電源ONからの経過時間
- ELAPSED_REALTIME_WAKEUP・・・電源ONからの経過時間(スリープ状態のときは電源をONにする)
- RTC・・・UTC時刻
- RTC_WAKEUP・・・UTC時刻(スリープ状態のときは電源をONにしてくれる)
これで、終わります。
参考サイト
AlarmManager | Android Developers
AlarmManagerで指定した時間に処理させる « Tech Booster