当我按下按钮时,它会调用一个获取用户输入并将其设置为变量的方法,然后将该变量放入一个额外的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。
答案 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