首页 > 解决方案 > 警报管理器设置了一个额外的警报

问题描述

当我使用警报管理器设置警报时,设置了额外的警报。我不知道为什么会这样。

“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);

你知道可能出了什么问题吗?!

标签: android

解决方案


什么是长数字?我猜这些是自纪元以来的毫秒数

  • 1597496400982 - 格林威治标准时间:2020 年 8 月 15 日星期六 13:00:00.982(昨天)
  • 1912856649822 - 格林威治标准时间:2030 年 8 月 13 日,星期二 13:04:09.822(十年后)
  • 1912857022688 - 格林威治标准时间:2030 年 8 月 13 日,星期二 13:10:22.688(十年后)

也许您在 3 天前(8 月 13 日)意外创建了这些警报,或者系统出于某种奇怪的原因创建了它们。考虑到智能手机的使用寿命,它们无论如何都不会被触发。

如果您想对其进行更多调试,您可以将系统时钟设置为该时间并尝试从Intent传递给您的BroadcastReceiver.


推荐阅读