我的应用程序执行以下代码:
// Check intakes every 15 minutes
Intent i = new Intent(this, IntakeReceiver.class);
i.putExtra("TYPE", "TAKEIN_CHECK");
PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), 0, i, 0);
AlarmManager am = (AlarmManager)(this.getSystemService(Context.ALARM_SERVICE));
Calendar cal = Calendar.getInstance();
int offset = 1000 * 60 * 15; // 1000 * 60 * 15 (15 minutes)
long nowLastRounded = cal.getTimeInMillis() - (cal.getTimeInMillis() % offset);
am.setRepeating(AlarmManager.RTC_WAKEUP, nowLastRounded + offset, offset, pi);
// Also set alarm for 11:50 every day to notify about low stock
Intent i2 = new Intent(this, LowStockReceiver.class);
i2.putExtra("TYPE", "STOCK_CHECK");
PendingIntent pi2 = PendingIntent.getBroadcast(getApplicationContext(), 1, i2, 0);
long interval_day = AlarmManager.INTERVAL_DAY;
long interval_hour = AlarmManager.INTERVAL_HOUR;
int offset2 = 1000 * 60 * 60 * 11 + 1000 * 60 * 50; // 11:50
final int tzOffset = TimeZone.getDefault().getOffset(System.currentTimeMillis());
offset2 -= tzOffset;
nowLastRounded = cal.getTimeInMillis() - (cal.getTimeInMillis() % interval_day);
am.setRepeating(AlarmManager.RTC_WAKEUP, nowLastRounded + offset2, interval_hour, pi2);
问题是LowStockReceiver.onReceive()
每15分钟调用一次(如IntakeReceiver.onReceive()
),但只应从11:50开始每小时调用一次。
我检查了nowLastRounded + offset2
的值,它等于今天11:50转换为GMT的当地时间。因此它应该在11:50,12:50,13:50等运行(目前仅用于测试目的)。
任何人都知道我可能做错了什么?
谢谢!
答案 0 :(得分:0)
您使用相同的ID来表示alarm.use不同的id。
答案 1 :(得分:0)
解决了我自己的问题。
问题是双重的,但问题没有包含足够的细节来解决这个问题:
上面的代码被称为主Application类的静态函数,可以通过第一个警报实例化。
这导致第二次警报被重新安排,时间似乎已经过去,导致它立即被解雇并使我感到困惑。