один дополнительный сигнал тревоги устанавливается диспетчером сигналов тревоги

#android

#Android

Вопрос:

Когда я устанавливаю будильник с помощью alarm manager, и устанавливается дополнительный сигнал тревоги. Я не знаю, почему это происходит.

Результаты «adb shell dumpsys alarm» показывают, что имеется один дополнительный сигнал тревоги, вот результат:

 RTC_WAKEUP #0: Alarm{6d76e0b type 0 when 1597496400982 ir.zima.schema}
  operation=PendingIntent{4c364e8: PendingIntentRecord{360d701 ir.zima.schema broadcastIntent}}
RTC_WAKEUP #0: Alarm{5f1e9e1 type 0 when 1912856649822 ir.zima.schema}
  operation=PendingIntent{2495306: PendingIntentRecord{d285dc7 ir.zima.schema broadcastIntent}}
Next wake from idle: Alarm{6731a0e type 0 when 1596440300037 ir.zima.schema}
operation=PendingIntent{5c68c2f: PendingIntentRecord{e088129 ir.zima.schema broadcastIntent}}
  

Странная часть заключается в том, что даже после того, как я удалил вызов метода (буквально, у меня больше нет установленных сигналов тревоги), adb все еще говорит, что установлен один сигнал тревоги:

     RTC_WAKEUP #0: Alarm{63e6995 type 0 when 1912857022688 ir.zima.schema}
  operation=PendingIntent{afc8aaa: PendingIntentRecord{943069b ir.zima.schema broadcastIntent}}
  Next wake from idle: Alarm{6731a0e type 0 when 1596440300037 ir.zima.schema}
  operation=PendingIntent{5c68c2f: PendingIntentRecord{e088129 ir.zima.schema broadcastIntent}}
  

Это метод, в котором я устанавливаю свой будильникAlarmManagerHelper.class:

  public static void setAlarm(Context context, int requestCode, int hour, int minute){


    AlarmManager am =( AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context//same activity should be used when canceling the alarm
            , AlarmReceiver.class);
    intent.setAction("android.intent.action.NOTIFY");
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT);

    Calendar time = getTime(hour, minute);

    //set Alarm for different API levels
    if (Build.VERSION.SDK_INT >= 23){
        am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,time.getTimeInMillis(),pendingIntent);
    }
    else{
        am.set(AlarmManager.RTC_WAKEUP,time.getTimeInMillis(),pendingIntent);
    }

}
  

Затем я вызываю этот метод следующим образом:

         Context context = getActivity().getApplicationContext();
        AlarmManagerHelper.setAlarm(context,
            AlarmManagerHelper.FIRST_ALARM_REQUEST_CODE,
            17,30);
  

У вас есть какие-либо идеи, что может пойти не так?!

Ответ №1:

Какие длинные числа? Я предполагаю, что это миллисекунды, прошедшие с эпохи?

  • 1597496400982 — GMT: суббота, 15. Август 2020 13:00:00.982 (вчера)
  • 1912856649822 — GMT: вторник, 13. Август 2030 13:04:09.822 (через десять лет)
  • 1912857022688 — GMT: вторник, 13. Август 2030 13:10:22.688 (через десять лет)

Возможно, вы создали эти сигналы 3 дня назад (13. Август) случайно или система создала их по какой-то странной причине. Учитывая срок службы смартфона, они все равно не будут срабатывать.

Если вы хотите еще немного его отладить, вы могли бы установить системные часы на это время и попытаться получить больше информации из Intent , которая передается вашему BroadcastReceiver .

Комментарии:

1. Я понял, что когда я удаляю приложение и перезапускаю его, этот сигнал тревоги может исчезнуть, но иногда этого не происходит

2. Вы могли бы проверить, соответствует ли intent.getAction() вашей строке действия. Или сравните намерение. toString(). Просто чтобы проверить, система ли создала сигнал тревоги или это точная копия вашего собственного. Вы также могли бы попытаться найти что-нибудь о тревоге в logcat в тот самый момент. Возможно, без фильтров, если ничего не отображается.