Android Alarm Manager在特定时间运行任务

时间:2017-04-07 14:48:49

标签: android alarmmanager

我看了很多文章,但似乎不适合我!

我必须每天7:15安排使用AlarmManager重复任务。在活动中设置以下方法并为其注册广播接收器!

private void setTask(Context context) {

    Calendar updateTime = Calendar.getInstance();
    updateTime.setTimeZone(TimeZone.getTimeZone("GMT"));
    updateTime.set(Calendar.HOUR_OF_DAY, 7);
    updateTime.set(Calendar.MINUTE, 15);

    Intent intent = new Intent(context, NotifyUpdate.class);
    PendingIntent fireAlarm = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarms = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarms.setRepeating(alarms.RTC_WAKEUP, updateTime.getTimeInMillis(), alarms.INTERVAL_DAY, fireAlarm);
}

问题是,当我运行应用程序时,无论时间设置如何,方法都会立即执行,但不会在(7:15)执行。

任何想法?

1 个答案:

答案 0 :(得分:0)

在设置闹钟之前尝试此操作

Calendar now = Calendar.getInstance();
if (updateTime.before(now)) {
            updateTime.add(Calendar.DAY_OF_MONTH, 1);  // if its in the past increment
}

alarms.setRepeating(alarms.RTC_WAKEUP, updateTime.getTimeInMillis(), alarms.INTERVAL_DAY, fireAlarm);

你说过你不会立即触发,不依赖于时间。之所以发生这种情况,是因为updateTime-object过去曾引用过,所以目标是将警报设置为7:15。这有助于避免立即触发。