Android闹钟管理器在特定时间运行任务
问题描述:
我看了很多文章,但看起来不适合我!Android闹钟管理器在特定时间运行任务
我必须安排一个重复的任务与AlarmManager每天7:15。在活动中设置以下方法并为其注册广播接收器!
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)不执行。
任何想法?
答
设置报警
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对象在过去的时间引用,所以我们的目标是在未来将闹钟设置为7:15。这将有助于避免立即触发。
“NotifyUpdate”类是“Service”还是“BroadcastReceiver”? – devnull69
感谢您的回复!这是一个BroadcastReceiver –
报警似乎很好。偏差可能在其他地方......您确定您不手动从其他地方的BroadcastReceiver调用该方法吗?此外,如果您没有将您的应用添加到优化例外列表中,Android6 +打盹模式可能会干扰AlarmManager。 – devnull69