これは問題なく動作します:
Intent mIntent = new Intent(getClass().getPackage().getName() + ".ALARM_TRIGGER");
PendingIntent pi = PendingIntent.getBroadcast(
BackgroundService.getInstance(),
mAlarmID,
mIntent,
PendingIntent.FLAG_UPDATE_CURRENT
);
mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), interval, pi);
コードは機能します。このコードを実行するたびに、保留中のインテントを ID (mAlarmID) で更新します。
ただし、電話がディープ スリープ状態の場合、上記のコードはトリガーされません。したがって、ELAPSED_REALTIME_WAKEUP を使用する必要があります。
mAlarmManager.setRepeating(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + startIn,
interval,
pi
);
を確認した後adb shell dumpsys alarm
、RTC_WAKEUP は常に正しい保留中のインテントを見つけて更新します。ただし、ELAPSED_REALTIME_WAKEUP でアラーム マネージャーを使用すると、同じ ID に関係なく、常に新しい保留中のインテントが作成されます。どういう意味ですか?
- コードが実行されるたびに#1で、dumpsysアラームには常に1つのアラームしか見つかりません。
- #2 では、コードが実行されるたびに、dumpsys アラームに ONE MORE アラームが表示されます。
これはバグですか?では、このコードを使用して、常に最大 1 つのアラームを発生させるにはどうすればよいでしょうか?