我正在编写一个 Android 应用程序,用户可以在其中选择几只股票来观看,如果预定义的警报条件匹配,则会收到警报。库存数据保存到自定义 Parcelable 类“警报”的 5 个对象(每个库存和条件一个对象)。定期数据更新是通过由 AlarmManager 启动的服务完成的。警报对象通过将它们放入 Intent 中传递给服务,该 Intent 放入 AlarmManager 的 PendingIntent 中。
Intent intent = new Intent(this, UpdateService.class);
Bundle b = new Bundle();
saveAlertsToBundle(b);
intent.putExtras(b);
intent.setData(Uri.parse("updateManager"));
PendingIntent pendIntent = PendingIntent.getService(this,0,intent,0);
// 1min intervall
long intervall = DateUtils.MINUTE_IN_MILLIS * 1;
// time of first start
long firstStartDelay = DateUtils.SECOND_IN_MILLIS * 30;
long firstStart = System.currentTimeMillis() + firstStartDelay;
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
// kill running
am.cancel(pendIntent);
//start new
am.setRepeating(AlarmManager.RTC_WAKEUP,firstStart,intervall,pendIntent);
我的问题是:
第一次启动服务时,只有一个警报对象传递给服务,一切正常。一旦存在更多警报对象,它们也需要传递给服务,但这不适用于上面的代码。服务不会收到带有额外警报对象的更新意图,而只会收到只有一个警报对象的初始意图。上面的代码正确地创建了一个包含附加警报对象的 Intent,但它们从未访问过服务。
所以我的问题是,如何将更新的意图传递给已经运行的 AlarmManager。
我已经尝试停止 AlarmManager(在 // kill running 注释处的行)并重新启动它,但这不起作用。也许是因为意图与他被创建时不持有相同的警报对象?我试图通过在意图的数据部分设置一个uri来解决这个问题,但这也没有帮助。
感谢帮助。