【问题标题】:Android setting alarm to a past dateAndroid将闹钟设置为过去的日期
【发布时间】:2014-08-29 10:12:54
【问题描述】:

如果我添加闹钟但将开始日期设置为过去的日期会怎样?

是被立即执行还是被放入队列并且从不执​​行?

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, startDate, repeatingValue, alarmIntent);

【问题讨论】:

  • 试试你自己,测试它很简单:)
  • 使用 setInexactRepeating 而不是 setRepeating..

标签: java android alarmmanager alarm


【解决方案1】:

来自documentation,如果startDate时间是过去的,将立即触发警报。

【讨论】:

    【解决方案2】:

    如果日期已过,则警报将立即触发。但是你可以尝试使用setInexactRepeating 而不是setRepeating

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, startDate, setInexactRepeating , alarmIntent);
    

    来自setInexactRepeating() docs

    安排一个具有不精确触发时间要求的重复警报; 例如,每小时重复一次的警报,但不一定在 每小时的最高点。

    【讨论】:

      【解决方案3】:

      实际上AlarmManager 使用当前时间。 因此,当您设置过去日期警报时,AlarmManager 将执行

      public void onReceive(Context context, Intent intent)
      {
      }
      

      方法。

      【讨论】:

        【解决方案4】:

        我认为闹钟只设置几个小时(至少通过 Android 用户界面),而不是特定的一天,这样它就会从您设置的确切 hour:minute 开始。

        【讨论】:

          【解决方案5】:

          我可以从我之前使用AlarmManager 的经验得出结论。过去的日期会立即触发警报。

          【讨论】:

            【解决方案6】:

            据我所知,当时间设置为过去时间时,AlarmManager.set 将立即执行,文档也说了这么多。 AlarmManager.setInexactRepeating 缺少这句话,这个闹钟在设置过去的时候不会触发,它会在下一个间隔触发,从给定的时间开始。

            【讨论】:

              【解决方案7】:

              AlarmManager.set 和 AlarmManager.setInexactRepeating 都在调用 setImpl,触发时间作为参数传递(在 Android 7.1.2 源代码中检查)。 --> 如果触发时间在过去,这两种方法没有区别。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2011-06-09
                • 2016-10-08
                • 1970-01-01
                • 1970-01-01
                • 2016-09-25
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多