読者です 読者をやめる 読者になる 読者になる

かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

Androidで定期的に処理を実行したい

そんなときはAlarmManagerを使います。 使い方はPendingIntentを作ってAlarmManagerを取得してsetRepeatingする感じ。 一回こっきりでいい場合は、setメソッドでもいいみたいですね。

詳細はAlarmManagerのドキュメントを見よう。

AlarmManager | Android Developers

ということで、こんなコードを書いてやれば現在時間から1分間隔でIntentが投げられるようになります。今回の場合はサービスをキックしています。

Intent intent = new Intent(this, LogService.class);
intent.setAction("LogServiceAction");
PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis(), 60 * 1000, pendingIntent);

Activityでやれば、アプリを起動したあとから有効になります。端末再起動時や、アプリアップデート時にリセットされるらしいので、それがいやならしかるべきIntentを受け取るReceiverを作ってそこで上記処理を書けばいいっぽいです。

ふむふむ。