AlarmManager に問題があり、繰り返しアラームをスケジュールするためのコードを設定しました。アプリケーションを実行した後、アラームは正常に動作します。ホームボタンをクリックしても(そしてアプリケーションが一時停止しても)、アラームはその間隔で実行されます。
問題は、タスク マネージャーを開いてアプリケーションを強制終了すると、アラームが停止することです。
これは正常な動作ですか?これを回避し、アプリケーションを閉じた後もアラームを実行し続ける方法はありますか?
コードは以下のとおりです。このメソッドは、ApplicationContext クラス onCreate() によって呼び出されます。
private void scheduleAlarm() {
if (alarmScheduled == true) { return; } // we only need to schedule once.
int alarmInterval = Def.pref(getApplicationContext()).getInt("alarmInterval", 30);
final Intent intent = new Intent(getApplicationContext(), CollectorAlarmReceiver.class);
final PendingIntent pending = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
AlarmManager alarmMgr = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmMgr.cancel(pending); // cancel others.
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+1000,
alarmInterval*1000, pending);
Def.log(TAG,"scheduleAlarm(): alarm scheduled, interval: "+alarmInterval+" seconds");
alarmScheduled = true;
}
受信者コード:
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "CollectorAlarmReceiver invoked, starting CollectorService in background");
context.startService(new Intent(context, CollectorService.class));
Intent collectorService = new Intent(context,CollectorService.class);
collectorService.putExtra("action", CollectorService.ACTION_BACKGROUND_REQUEST_MESSAGES);
context.sendBroadcast(collectorService);
}
ありがとう!