我试图设置并运行一个每小时运行的警报,并由一些变量设置,因为它不会立即运行,如果时间大于第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表示最后一次警报 . 它不是从其他任何地方调用的 .
任何帮助是极大的赞赏 .
所有警报在小时后超过一小时后重置 -
Calendar 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点触发
2:15触发
2:30触发
2 回答
来自android文档 .
在API 19之后重复警报并不精确 . 这改进了机器人的性能,因为安卓系统以近距离警告并唤醒系统一次并完成所有警报(也来自其他应用程序) . 如果您确实需要精确报警,则必须设置正常的一次报警,然后在第一次报警的呼叫中再次设置报警 .
尝试使用此代码每小时重复一次警报
希望这会有所帮助 . 您可以询问是否有任何进一步的疑问 .