以下是一个简单的警报调用程序,请注意我想要捕获的鳟鱼数量:
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);
}
当我第一次运行它时,BroadcastReceiver正确地看到我今天想要捕获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的黑客攻击方式吗?谢谢! (我可能几个小时都没能看到你的回复,因为我在发布之后就去钓鱼了。)
答案 0 :(得分:1)
(this,0,intent,0);将flag参数(4th)设置为http://developer.android.com/reference/android/app/PendingIntent.html
中的一个常量