警报管理器设置了一个额外的警报

时间:2020-08-15 13:15:53

标签: android

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

“ adb shell dumpsys警报”的结果表明存在一个额外的警报,结果如下:

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 个答案:

答案 0 :(得分:1)

长数字是多少?我猜这些是milliseconds since epoch

  • 1597496400982-GMT:2020年8月15日,星期六,13:00:00.982(昨天)
  • 1912856649822-GMT:2030年8月13日,星期二(十年内)
  • 1912857022688-GMT:2030年8月13日,星期二(十年内)

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

如果要对其进行更多调试,可以将系统时钟设置为该时间,并尝试从Intent获取更多信息,该信息将传递给BroadcastReceiver