【问题标题】:How far (and why!) do Android alarms execute in the past?Android 警报过去执行多远(以及为什么!)?
【发布时间】:2018-10-26 23:48:01
【问题描述】:

我在 Android 中设置闹钟时遇到过几次挫折。我尝试设置重复/非重复警报和精确/不精确警报,但没关系,如果警报在过去设置过一段时间,它会在设置后立即执行。早在过去 5 小时内我就已经对此进行了测试,并且仍然会立即执行。

例如:

时间是早上 7 点,我设置了一个闹钟在凌晨 2 点执行。这显然是指下次时钟显示为凌晨 2:00 时,但没关系,闹钟在早上 7 点响起,就在它设置好之后。

下面的代码应该在凌晨 1:00 到凌晨 3:59 之间选择一个随机时间来设置/执行下一个日历日的警报,然后逻辑循环返回以在执行后再次设置自己。警报将永远重复执行。

    int randomHour = new Random().nextInt((3 - 1) + 1) + 1;
    int randomMinute = new Random().nextInt((59 - 1) + 1) + 1;

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, randomHour);
    calendar.set(Calendar.MINUTE, randomMinute);
    calendar.set(Calendar.SECOND, 0);
    calendar.add(Calendar.DAY_OF_MONTH, 1);

    alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

问题:

  1. Android 过去在什么时候停止执行警报?

  2. 有没有办法阻止这种情况?

【问题讨论】:

    标签: android alarmmanager android-alarms


    【解决方案1】:

    这显然是为了下一次” 对计算机不起作用,它们会完全按照你告诉他们的去做。

    calendar.getTimeInMillis() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。您不仅需要指定时间,还需要指定警报响起的日期。相反,您总是打电话给calendar.add(Calendar.DAY_OF_MONTH, 1);(当月的第一天)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-28
      相关资源
      最近更新 更多