警报管理器 INTERVAL_DAY 不工作
Alarm manager INTERVAL_DAY not working
我想要 运行 每天 8 点左右 a.m 一些代码。
我在 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);
但是这个 运行 每次应用程序启动时的作业。
我的代码是好是坏?这段代码在正确的地方(onCreate)吗?我做错了什么?
我的最低 API 是 14
此代码告诉 AlarmManager 第一个闹钟应该在上午 8 点,与此代码为 运行ning 的同一天。如果您 运行 在任何给定日期的 之后 上午 8 点 运行 宁此特定代码,那么第一个上午 8 点将是过去,并且 AlarmManager 可能会选择 运行 它立即,因为它错过了第一次出现并将尝试弥补它。如果您希望第一个闹钟是 下一个 日晚上 8 点,您必须在日历中添加一天来设置它。
感谢 Doug Stevenson,我通过在我的方法中添加简单的 if 解决了这个问题。
我在 8:00am 加薪的方法是:
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);
我想要 运行 每天 8 点左右 a.m 一些代码。 我在 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);
但是这个 运行 每次应用程序启动时的作业。 我的代码是好是坏?这段代码在正确的地方(onCreate)吗?我做错了什么?
我的最低 API 是 14
此代码告诉 AlarmManager 第一个闹钟应该在上午 8 点,与此代码为 运行ning 的同一天。如果您 运行 在任何给定日期的 之后 上午 8 点 运行 宁此特定代码,那么第一个上午 8 点将是过去,并且 AlarmManager 可能会选择 运行 它立即,因为它错过了第一次出现并将尝试弥补它。如果您希望第一个闹钟是 下一个 日晚上 8 点,您必须在日历中添加一天来设置它。
感谢 Doug Stevenson,我通过在我的方法中添加简单的 if 解决了这个问题。 我在 8:00am 加薪的方法是:
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);