【发布时间】:2015-09-04 18:17:47
【问题描述】:
我编写了一个每天早上 5:22 运行的警报代码。该代码在第一个时间间隔内运行良好,但在 24 小时前触发第二个时间间隔。
我在 MainActivity 的 onCreate() 方法中添加了警报代码,该代码在第一个间隔内运行完美,但在第一个间隔之后,如果我打开 MainActivity,警报会再次触发,并在我打开 MainActivity 时继续触发。例如,如果我打开 MainActivity 两次,警报会触发两次。
我在这里也提到了一些解决方案,但它们不像marmor's answer那样工作。
我也尝试检查是否使用 FLAG_NO_CREATE 标志设置了警报,但它仍然不起作用。
下面是我的代码。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, ServiceReceiver.class);
PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 11111, intent, 0);
Calendar calNow = Calendar.getInstance();
Calendar calSet = (Calendar) calNow.clone();
calSet.set(Calendar.HOUR_OF_DAY, 5);
calSet.set(Calendar.MINUTE, 11);
calSet.set(Calendar.SECOND, 0);
calSet.set(Calendar.MILLISECOND, 0);
if(calSet.compareTo(calNow) <= 0){
//Today Set time passed, count to tomorrow
calSet.add(Calendar.DATE, 1);
}
alarmMgr.cancel(alarmIntent);
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calSet.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, alarmIntent); //1000 * 60 * 1440
}
我正在记录服务运行到文本文件的时间。
编辑:
目标sdk版本为22
根据 kolombo 的建议,我检查了日期并检查了我的 if 语句是否已执行。 if 语句被执行,我得到了明天相同时间的日期。
我正在使用 Moto E 开发应用程序。
我已将项目文件here 上传到谷歌驱动器上。
【问题讨论】:
-
我想你的 if 语句不起作用。你调试过这个日期吗?你需要更多的日期控制,LogCat 中的更多调试信息,你会看到它有什么问题。将日期转换为正常格式并进行比较。
-
项目的目标 SDK 是什么(在 Manifest 中)?
-
并且不要使用克隆,它不是必需的。 'if(calSet.getTimeInMillis()
-
目标sdk版本为22
-
@kolombo if 条件正在执行,只是通过在 if 条件中添加 Log.i 来检查 log cat,但仍然会提前触发警报。
标签: java android alarmmanager