计算重复AlarmManager的开始时间

时间:2015-12-12 23:31:22

标签: android time alarmmanager repeatingalarm

我正在使用一个使用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,与设备的小时值无关。

1 个答案:

答案 0 :(得分:0)

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

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