【问题标题】:Alarm Manager setRepeating firing randomly警报管理器设置重复随机触发
【发布时间】:2014-08-16 08:42:45
【问题描述】:

我已经阅读了这里关于 setRepeating 警报的大部分帖子,但似乎没有一个可以解决我的问题。

我有两个重复的警报设置了一定的时间,如下所示:

    trigger = System.currentTimeMillis()
                + (Integer.parseInt(test) * 60 * 1000);

    workLength = (long) (Integer.parseInt(test) * 60 * 1000);

    breakLeng = (long) (Integer.parseInt(breakLength) * 60 * 1000);

    private void recurringInitialAlarm() {
                // TODO Auto-generated method stub
                // work inital


                    alarm.set(AlarmManager.RTC_WAKEUP, trigger, pintent);
                    SharedPreferences pref = getActivity()
                            .getSharedPreferences("pref", 0);
                    SharedPreferences.Editor edit = pref.edit();

                    System.out.println("initial work alarm set");
                    edit.putString("takeBreak", "true");
                    edit.commit();
                    System.out.println("takeBreak = true");

            }

        private void recurringWorkAlarm() {
                // TODO Auto-generated method stub
                // work recurring

                alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP,
                            System.currentTimeMillis(), (2 * workLength) + breakLeng,
                            pintent3);
                System.out.println("work recurring"
                            + ((2 * workLength) + breakLeng));

            }

        private void recurringBreakAlarm() {
                // TODO Auto-generated method stub
                // break

                alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP,
                            System.currentTimeMillis(), workLength + breakLeng, pintent2);
                System.out.println("break times"
                            + workLength + breakLeng);

            }

待定意图由以下方式指定:

Intent intent = new Intent(getActivity(), AlarmReceiver.class);

        final PendingIntent pintent = PendingIntent
                .getBroadcast(getActivity(), 1, intent,
                        PendingIntent.FLAG_UPDATE_CURRENT);

        final PendingIntent pintent2 = PendingIntent
                .getBroadcast(getActivity(), 2, intent,
                        PendingIntent.FLAG_UPDATE_CURRENT);

        final PendingIntent pintent3 = PendingIntent
                .getBroadcast(getActivity(), 3, intent,
                        PendingIntent.FLAG_UPDATE_CURRENT);

问题在于,两个重复的警报会在创建后大约 10 秒触发,并且之间的时间是随机的。我知道对于 KitKat 设备,警报并不准确并且可能会有所不同,但是从长远来看,它确实会在之后的时间正确地发送通知。

例如,当我将两个重复设置为彼此正好一分钟后:

17:09:20 -- 启动警报管理器
17:09:35 -- 两次重复警报均已触发
17:10:23 -- 一个被解雇了
17:11:28 -- 一个被解雇了
17:12:34 -- 一个被解雇了,等等......

问题:如何消除这些在大约 10 秒后出现的随机通知?

【问题讨论】:

  • 1) 您可能应该分别发布每个问题,并且 2) 对于问题 1,您需要发布更多代码......在这一点上意外的结果。
  • 我用一个问题更新了它。关于问题1,我不太清楚为什么会得到意想不到的结果,我试过检查设置的闹钟时间是否大于当前时间,但无济于事;它仍然在开始时随机触发。

标签: android android-intent android-pendingintent android-alarms


【解决方案1】:

警报“立即”(15 秒后)触发的原因是您为 System.currentTimeMillis() 安排了第一个事件 - 并且 AlarmManager 在 15 秒内完成,这非常接近。

您需要为System.currentTimeMillis() + initial_wait_period 设置第一个警报事件

【讨论】:

  • 谢谢!我误解了那个参数的作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多