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)不执行。

任何想法?

+0

“NotifyUpdate”类是“Service”还是“BroadcastReceiver”? – devnull69

+0

感谢您的回复!这是一个BroadcastReceiver –

+0

报警似乎很好。偏差可能在其他地方......您确定您不手动从其他地方的BroadcastReceiver调用该方法吗?此外,如果您没有将您的应用添加到优化例外列表中,Android6 +打盹模式可能会干扰AlarmManager。 – devnull69

设置报警

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。这将有助于避免立即触发。

+0

请为您的答案添加解释。 – jmattheis

+0

请将此编辑添加到您的答案。 – jmattheis

+0

在我的代码中,我带走了日历实例并保存在updateTime上!我能得到另一个实例并保存在现在?! –