意图额外似乎没有刷新

时间:2013-11-08 19:28:51

标签: android android-intent android-broadcast

当我按下按钮时,它会调用一个获取用户输入并将其设置为变量的方法,然后将该变量放入一个额外的intent并发送给BroadcastReceiver,后者根据该值决定该做什么。它只在第一次工作时,在所有下一次按下时,无论该变量值是否改变,意图额外值都不会改变。它永远保持在第一次按下时设定的值。如何使用新值重写intent额外?

我如何设置额外费用:

Intent intentForReceiver = new Intent(this, AlarmReceiver.class);
intentForReceiver.putExtra("checkBox1", checkBox1.isChecked());
        PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0,
intentForReceiver, 0);

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
    AlarmManager.INTERVAL_DAY, alarmIntent);

我如何在BroadcastReceiver上收到额外费用并将其置于服务意图:

Intent intentForService = new Intent(context, CMService.class);
intent.putExtra("checkBox1", intentForReceiver.getExtras().getBoolean("checkBox1"));
context.startService(intentForService);

我如何收到服务上的额外费用:

if(intentForService.getExtras().getBoolean("checkBox1")) {
...
} else {
...
}

所以这是我的代码。如果我取消选中checkBox1并按下按钮,它仍然完成只有在checkBox1.isChecked()为真时才应该完成的工作,所以这意味着这个值在第一次按下后永远保持为真,并且在我取消选中时不会更新checkBox1。

1 个答案:

答案 0 :(得分:1)

在重新创建闹钟之前,取消第一个闹钟。为此,您需要重新设置Intent并在AlarmManager上调用取消。例如,我在Alarm课程中有一个方法在开始新课程之前为我取消

// cancel existing logout alarm
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 
     REQUEST_CODE, alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT);     
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.cancel(pendingIntent);

然后重新创建PendingIntent并设置新的AlarmManager

This answer explains a little more