先日のエントリーで、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秒程度ずれても問題ないような時に使用するのが良いでしょう。

ブログ内の関連する記事