2011-04-23 72 views
0

下面是一个简单的报警调用程序,注意鳟鱼的数量我要赶:有人可以解释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); 
    } 
  1. 当我运行它的第一次,在广播接收器正确地看到,我想赶上21鳟鱼今天。

  2. 我在Eclipse中将数字更改为22,再次运行它,接收器仍然看到21!无论我如何在这里尝试,包括从Android上卸载程序,接收器都会得到旧号码。

  3. 现在,如果我将接收器类从AlarmReceiver5重命名为AlarmReceiver6,那么它可以成功获取不同的编号。但是同样的情况再次发生了,也就是说,无论我怎么改变数字,接收机都会得到旧的号码,直到我重命名该类。但是,如果我更改了Bundle中的元素名称(即上例中的“intData”和“textData”),接收方根本就得不到任何东西!数字变为0.当然,我相应地更新了接收方。

  4. 即使我使用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在想什么吗?谢谢! (我可能无法在几个小时内看到您的回复,因为我发布后会出去钓鱼。)

回答

相关问题