首页 文章

Android AlarmManager小时闹铃运行错误间隔

提问于
浏览
0

我试图设置并运行一个每小时运行的警报,并由一些变量设置,因为它不会立即运行,如果时间大于第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 回答

  • 0

    来自android文档 .

    注意:从API 19开始,所有重复警报都不准确 . 如果您的应用程序需要精确的交付时间,那么它必须使用一次性精确警报,每次重新安排如上所述 . targetSdkVersion早于API 19的旧应用程序将继续将所有警报(包括重复警报)视为精确警报 .

    在API 19之后重复警报并不精确 . 这改进了机器人的性能,因为安卓系统以近距离警告并唤醒系统一次并完成所有警报(也来自其他应用程序) . 如果您确实需要精确报警,则必须设置正常的一次报警,然后在第一次报警的呼叫中再次设置报警 .

  • 1

    尝试使用此代码每小时重复一次警报

    alarmSwap.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
        calx.getTimeInMillis(),
        AlarmManager.INTERVAL_HOUR, pintent);
    

    希望这会有所帮助 . 您可以询问是否有任何进一步的疑问 .

相关问题