Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Alarm manager在特定时间运行任务_Android_Alarmmanager - Fatal编程技术网

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

Android Alarm manager在特定时间运行任务,android,alarmmanager,Android,Alarmmanager,我读了很多文章,但非似乎对我有用 我必须与AlarmManager一起安排每天7:15的重复任务。在活动中设置以下方法并为其注册广播接收器 private void setTask(Context context) { Calendar updateTime = Calendar.getInstance(); updateTime.setTimeZone(TimeZone.getTimeZone("GMT")); updateTime.set(Calendar.HOUR

我读了很多文章,但非似乎对我有用

我必须与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
a
Service
BroadcastReceiver
?感谢您的回复!这是一个广播接收器,警报似乎没有问题。偏差可能在其他地方。。。您确定没有从其他地方的BroadcastReceiver手动调用该方法吗?此外,如果您没有将应用程序添加到优化异常列表中,Android6+Doze模式可能会干扰AlarmManager。使用
setRepeating
时,您需要确保今天尚未到达时间,否则(根据文档)
如果指定的触发时间是过去,报警将立即触发,报警计数取决于过去触发时间相对于重复间隔的距离。
该方法仅从创建该方法的MainActivity调用!我设定了不同的时间,但仍然没有运气。我正在检查KitKat 4.4.2中的应用程序,请为您的答案添加解释。在我的代码中,我已获取日历实例并保存在updateTime上!我可以再找一个实例,现在就保存吗?!!