0

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

我如何设置额外的:

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() 为真时才应完成的工作,因此这意味着该值在第一次按下后永远保持为真,并且在我取消选中时不会更新复选框1。

4

1 回答 1

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

这个答案解释了更多

于 2013-11-08T20:09:36.390 回答