【问题标题】:Calculate start time for the repeated AlarmManager计算重复 AlarmManager 的开始时间
【发布时间】:2015-12-12 23:31:21
【问题描述】:

我正在开发一个使用 AlarmManager 的 Android 应用程序,如下所示:

Long startTime = Calendar.getInstance().getTimeInMillis();
alarm.setRepeating(
     AlarmManager.RTC_WAKEUP,
     startTime,
     15* 60 * 1000,
     PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT));

我想计算startTime。假设我需要在 15 分钟后重复运行一些代码,但是 15 分钟后不应该从现在(当前时间)开始,而是从下一个插槽开始。每当我启用警报时,它应该从下一个可用插槽开始(这意味着我需要计算开始时间)。

示例 1:如果当前时间是 10:8,那么第一次运行应该在 10:15。

示例 2:如果是 10:17,那么首先应该在 10:30 运行。

示例 3:如果是 10:38,那么第一次运行应该在 10:45。

由于 AlarmManager 以毫秒为单位接受 2 个时间参数,第一个是启动警报的时间,第二个作为重复时间,以毫秒(15 分钟)为单位。

如果仍然不清楚,那么我会说我需要在设备的分钟数是以下值之一时运行我的代码: 00、15、30、45,与设备的小时值无关。

【问题讨论】:

    标签: android time alarmmanager repeatingalarm


    【解决方案1】:

    首先,请记住,Android 6.0+ 上的打盹模式和应用待机意味着您将无法随时获得控制权。

    话虽如此,您需要调整startTime。致电get(Calendar.MINUTE) 以获取当前分钟数。确定您需要增加多少分钟才​​能到达下一个一刻钟。然后,调用add(Calendar.MINUTE, ...),其中... 是您需要添加的量,以获取下一刻钟的分钟值。使用add() 将根据需要处理增加小时、天等。

    【讨论】:

    • 这就是我想知道的。其实我正在寻找一些等式。这可以告诉我将哪个时段(在本例中为季度)设置为开始时间。我可以使用 if 分钟条件来决定季度,但间隔不是静态的,它可能在(15、30、60、动态)。如果可以应用条件,但解决方案必须是动态的,那就更好了。
    • @PHPAvenger: if (minutes<15) { offset=15-minutes; } else if (minutes<30) { offset=30-minutes; } ...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    相关资源
    最近更新 更多