我试图设置并运行一个每小时运行一次的警报,并由一些变量设置,因为它不会立即运行,如果时间大于第58分钟 我们的想法是将它设置为@ X小时和58分钟,因此它将在给定的分钟(58)每小时运行一次。
Calendar calCurrent = Calendar.getInstance();
int time = 58 ;
Calendar calx = Calendar.getInstance();
calx.set(Calendar.MINUTE, time);
calx.set(Calendar.SECOND, 5);
if (calCurrent.get(Calendar.MINUTE) > time) {
calx.add(Calendar.HOUR, +1);
}
System.out.println("Alarm is set to - " + calx.get(Calendar.HOUR)+":"+ calx.get(Calendar.MINUTE));
alarmSwap = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmSwap.setRepeating(AlarmManager.RTC_WAKEUP,
calx.getTimeInMillis(), 60 * 60 * 1000, pintent);
代码在第一个实例中正常运行并运行,然后由于某种原因警报将在下一个小时运行@ 0分钟。
时间轴看起来像
1:23 - 应用启动
1:23 - 重复闹钟设置为1:58(间隔1小时)
1:58 - 触发警报
3:00 - 触发警报
我不知道为什么会在最后一次闹铃时触发此警报@:00。它不是从其他任何地方调用的。
非常感谢任何帮助。
所有闹钟都会在一小时后超过一小时后重置 -
日历calnew = Calendar.getInstance(); calnew.add(Calendar.SECOND,+ 5); alarm =(AlarmManager)getSystemService(Context.ALARM_SERVICE); alarm.setRepeating(AlarmManager.RTC_WAKEUP,calnew.getTimeInMillis(),900000,pintent);
时间表 -
1:20初始化
1:20触发了
1:35触发了
1:50触发了
2:00触发
2:15触发了
2:30触发
答案 0 :(得分:1)
来自android文档。
在API 19之后,重复警报并不准确。这会改善机器人的性能,因为安卓系统会以近距离警告并唤醒系统一次并完成所有警报(也来自其他应用程序)。 如果您真的需要准确的警报,则必须设置正常的一次性警报,然后在第一次警报的呼叫中再次设置警报。注意:从API 19开始,所有重复警报都不准确。如果你的 应用程序需要精确的交付时间,然后必须使用一次性 确切的警报,每次重新安排,如上所述。遗产 targetSdkVersion早于API 19的应用程序将 继续发出所有警报,包括重复警报, 确切地对待。
答案 1 :(得分:0)
尝试使用此代码每小时重复一次警报
alarmSwap.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
calx.getTimeInMillis(),
AlarmManager.INTERVAL_HOUR, pintent);
希望这会有所帮助。您可以询问是否有任何进一步的询问。
答案 2 :(得分:0)
这对我来说每隔1小时触发一次警报
npm run dev