Android 报警管理器间隔\u天不工作
我想每天早上8点左右运行一些代码。 我在MainActivity的onCreate中有此代码Android 报警管理器间隔\u天不工作,android,alarmmanager,background-service,Android,Alarmmanager,Background Service,我想每天早上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
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);
但这会在每次启动应用程序时运行作业。
我的代码是好的还是错的?此代码是否位于正确的位置(onCreate)?我做错了什么
My min API为14此代码告诉AlarmManager,第一个警报应在该代码运行的当天上午8点发出。如果您在任何给定的一天上午8点之后运行此特定代码,那么第一次出现在上午8点之后的代码将成为过去,AlarmManager可能会选择立即运行此代码,因为它错过了第一次出现的代码,并将尝试对其进行弥补。如果您希望第二天的第一个闹钟是晚上8点,您必须在日历中添加一天来设置闹钟。多亏了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);
谢谢重播。你有权利。但我不明白。我在MainActivity的onCreate方法中创建并设置报警。如果我给cal加上一天,警报今天就不会启动了。或者我错了。