我希望每天早上8点运行一些代码。 我在MainActivity中的onCreate中有这段代码
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 8);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
Intent intent = new Intent(this, PriceAmountService.class);
PendingIntent pintent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pintent);
但每次app启动时都会运行该作业。 我的代码是好还是错?此代码是否在正确的位置(onCreate)?我做错了什么?
我的min API是14
答案 0 :(得分:6)
感谢Doug Stevenson,我通过向我的方法添加简单的if来解决这个问题。 我在上午8:00完成工作的方法是:
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 8);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
if (Calendar.getInstance().after(cal)) {
cal.add(Calendar.DAY_OF_MONTH, 1);
}
Intent intent = new Intent(this, PriceAmountService.class);
PendingIntent pintent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pintent);
答案 1 :(得分:3)
此代码告诉AlarmManager第一个警报应该是在该代码运行的当天的同一天上午8点。如果你在任何一天的 8am之后运行这个特定的代码,那么第一个上午8点就会发生,并且AlarmManager可能会选择立即运行它,因为它错过了第一次出现并将尝试弥补它。如果您希望第一个闹钟是下一个天的晚上8点,则必须在日历中添加一天,然后再添加一天。