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

时间:2013-11-25 06:17:28

标签: android alarmmanager

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

3 个答案:

答案 0 :(得分:1)

来自android文档。

  

注意:从API 19开始,所有重复警报都不准确。如果你的   应用程序需要精确的交付时间,然后必须使用一次性   确切的警报,每次重新安排,如上所述。遗产   targetSdkVersion早于API 19的应用程序将   继续发出所有警报,包括重复警报,   确切地对待。

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

这对我来说每隔1小时触发一次警报

npm run dev