1

これは問題なく動作します:

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 つのアラームを発生させるにはどうすればよいでしょうか?

4

0 に答える 0