当我使用警报管理器设置警报时,将设置额外的警报。我不知道为什么会这样。
“ 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);
您知道什么地方可能出问题了吗?!
答案 0 :(得分:1)
长数字是多少?我猜这些是milliseconds since epoch?
也许您是三天前(8月13日)偶然创建了这些警报,或者系统出于某种奇怪的原因创建了这些警报。考虑到智能手机的使用寿命,无论如何它们都不会被触发。
如果要对其进行更多调试,可以将系统时钟设置为该时间,并尝试从Intent
获取更多信息,该信息将传递给BroadcastReceiver
。