我很难让我的收音机闹钟按预期工作,我在这里阅读了很多关于该主题的帖子,但不幸的是,没有一个对我有帮助。
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent penInt = PendingIntent.getBroadcast(this, intentId, intent, 0);
这种区分我在 stackoverflow 上找到的 API 级别的方法并将其放在我的calcNextAlarm()
函数中(加上一些用于调试的日志消息)以正确设置警报,无论设备上使用什么 API:
// problems in doze mode api 23+
if (Build.VERSION.SDK_INT >= 23) {
if (testMode) Log.d("Ben", "setAlarmClock() - API 23+");
am.setAlarmClock(new AlarmManager.AlarmClockInfo(alarmTimeInMillis, penInt), penInt);
}
else if (Build.VERSION.SDK_INT >= 19) {
// Wakes up the device in Idle Mode
if (testMode) Log.d("Ben", "setExact() - API >= 19 && API < 23");
am.setExact(AlarmManager.RTC_WAKEUP, alarmTimeInMillis, penInt);
}
// Old APIs
else {
if (testMode) Log.d("Ben", "set() - API < 19");
am.set(AlarmManager.RTC_WAKEUP, alarmTimeInMillis, penInt);
}
根据 Log.d 消息,我可以看到,在我的 Android 7.1 设备上,第一种方法setAlarmClock()
正在执行以在接收器中设置警报。
经过 3 周的不成功测试和编码后,我变得非常绝望——我今天的闹钟再次迟到了 4 分钟——这永远不会发生,根据打瞌睡模式培训页面:
使用 setAlarmClock() 设置的警报继续正常触发——系统在这些警报触发前不久退出打盹。
在我的 7.1 手机上,当我将闹钟设置为“现在 +5 或 6”分钟时,闹钟甚至会晚 20 秒到 1:40 分钟。谁能告诉我如何真正及时完美地关闭警报?