下面是一个简单的报警调用程序,注意鳟鱼的数量我要赶:有人可以解释AlarmManeger的这种奇怪的行为吗?
private void setReminder() {
Intent intent = new Intent(this, AlarmReceiver5.class);
int trout = 21;
intent.putExtra("intData", trout);
intent.putExtra("textData",
"Great day for fishing! How many trout you want to get today? ");
PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0);
AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 15 * 1000, sender);
}
当我运行它的第一次,在广播接收器正确地看到,我想赶上21鳟鱼今天。
我在Eclipse中将数字更改为22,再次运行它,接收器仍然看到21!无论我如何在这里尝试,包括从Android上卸载程序,接收器都会得到旧号码。
现在,如果我将接收器类从AlarmReceiver5重命名为AlarmReceiver6,那么它可以成功获取不同的编号。但是同样的情况再次发生了,也就是说,无论我怎么改变数字,接收机都会得到旧的号码,直到我重命名该类。但是,如果我更改了Bundle中的元素名称(即上例中的“intData”和“textData”),接收方根本就得不到任何东西!数字变为0.当然,我相应地更新了接收方。
即使我使用ApiDemo的AlarmController和OneShotAlarm类,上述情况也是如此。
现在,如果我调整代码多一点,我取消了报警设置下一个报警之前,则接收器没有得到任何东西,数量为0。请参见下面的代码:
private void setReminder() {
AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver5.class);
// Cancel the alarm
PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0);
am.cancel(sender);
// Then set it again (using a newly created PendingIntent).
sender = PendingIntent.getBroadcast(this, 0, intent, 0);
int trout = 21;
intent.putExtra("intData", trout);
intent.putExtra("textData",
"Great day for fishing! How many trout you want to get today? ");
sender = PendingIntent.getBroadcast(this, 0, intent, 0);
am.cancel(sender);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 15 * 1000, sender);
}
有人可以解释黑客Android AlarmManager在想什么吗?谢谢! (我可能无法在几个小时内看到您的回复,因为我发布后会出去钓鱼。)
“FLAG_UPDATE_CURRENT”在这里通常是正确的选择。 – CommonsWare 2011-04-23 21:15:59
@CommonsWare,这是一个窍门。有趣的是,我之前看到过这些标志,但从未注意过。感谢你们两位! – wwyt 2011-04-24 05:02:42