Three.jsを使って、作ってみた

プログラミング関連の事を色々書いています(^^) 週末はレストランやコンビニのお菓子のことを書いています。

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