android - Android 警报在过去执行了多远(以及为什么!)?

标签 android alarmmanager android-alarms

我在 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. 有什么办法可以阻止这种情况吗?

最佳答案

这显然是为下一次准备的” 不适用于计算机,它们会按照您告诉它们的方式执行。

calendar.getTimeInMillis() 返回自格林威治标准时间 1970 年 1 月 1 日 00:00:00 以来的毫秒数。您不仅需要指定时间,还需要指定希望闹钟响起的日期。相反,您总是调用 calendar.add(Calendar.DAY_OF_MONTH, 1);(当月的第一天)

关于android - Android 警报在过去执行了多远(以及为什么!)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52783092/

相关文章:

java - 如何在Android上缓存数据?

android - Android 中的 Kiosk 模式

java - 从另一个类中的 protected 方法获取变量值

android - 广播接收器不会在 android Lollipop 设备上触发

java - 每天仅从 Android ListView 中为用户验证一次

android - 如何以最短时间查询数据库中的 3 个表

java - 关于设置闹钟的非常奇怪的问题

android - 如何关闭或停止我在 Android 中启动的外部应用程序

android - 在终止的应用程序中设置警报管理器的 nullPointerException

android - 应用多次收到 BOOT_COMPLETED 并再次重新创建警报