android - 警报管理器设置了一个额外的警报
问题描述
当我使用警报管理器设置警报时,设置了额外的警报。我不知道为什么会这样。
“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);
你知道可能出了什么问题吗?!
解决方案
什么是长数字?我猜这些是自纪元以来的毫秒数?
- 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
.
推荐阅读
- r - qplot 不适用于 R 中的 grid.arrange 函数
- go - Go中切片的通用类型
- java - 错误:找不到符号导入静态 org.hamcrest.CoreMatchers.containsString;
- visual-studio - SSIS 2019 查找转换编辑器的 Visual Studio 2019 表单无法正确显示 - 行被挤压在一起
- ios - SwiftUI 致命错误:未找到“”类型的 ObservableObject 和 @EnvironmentObject 错误:可能作为此视图的祖先而丢失
- python - 从引号内的 JSON 字符串中删除 \r\n 以获得多行
- javascript - 谷歌地图功能未定义
- swift - SwiftUI:在 iPhone 8 上进行测试会削减部分视图,在某些组件上添加太多高度会导致白屏
- reactjs - React 文档中有关于如何在 React 中思考的错误吗?
- sql - SSRS 多个可选参数