AlarmManager 2 定期的な間隔で繰り返し処理をするプログラム

先日のエントリーで、AlarmManager#setを使った処理を記述しました。
setは、何月何日何時何分に処理をするといった時に使用します。毎日0時1秒に処理をしたいのであれば、BroadcastReceiverで再度setにて指定する必要があります。

上記のような処理ではなく、一定の間隔で処理を行いたい時は、setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)を使用します。

このメソッドでは、繰り返しブロードキャストレシーバーにメッセージを送る事ができ、AlarmManager#cancelされるまで永遠に繰り返します。(RSSReaderポッドキャストプログラムでFeedを取得する時などに使用しています)。

13分間隔でBroadcastReciverを呼び出すプログラム(送り側)

  Intent intent = new Intent(ctx, ReceiverIconChange.class);  intent.setAction(CALENDER_ICON_CHANGE);  PendingIntent sender = PendingIntent.getBroadcast(ctx, 0, intent, 0)  AlarmManager am = (AlarmManager)(ctx.getSystemService(ALARM_SERVICE));  long interval = 13 * 1000 * 60;  long firstTime = SystemClock.elapsedRealtime();  am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,firstTime, interval, mFeedService);

上記コードでは、初回に起動される時間を現在としています。
受け取り側のレシーバーは、昨日のAlarmManager1の記事とほぼ同じですが、アラームを再設定する必要がない所が異なります。

Service受取側

public class ReceiverIconChange extends BroadcastReceiver { public void onReceive(Context ctx, Intent intent) {String action = intent.getAction();if (!CALENDER_ICON_CHANGE.equals(action)) {// アイコン変更の要求でなかったら、終了return;}   doSomething();}

繰り返し処理をするといっても、ゲームとか、時計の秒針をきちんと実装するとかシビアな物には使えません。1秒程度ずれても問題ないような時に使用するのが良いでしょう。

ブログ内の関連する記事


コメント

このブログの人気の投稿

ドローンプログラミング体験教室を伊豆大島の小学校でしてきました

iBatisで動的SQL

情報処理安全確保支援士登録証のカード型が届きました。