0

ボタンを押すと、ユーザー入力を取得して変数に設定するメソッドが呼び出され、その変数が追加のインテントに入れられ、その値に応じて何をすべきかを決定する BroadcastReceiver に送信されます。最初にのみ機能し、次のすべてのプレスでは、変数の値が変更されても追加の値は変更されません。最初に押したときに設定された値を永久に保持します。インテント エクストラを新しい値で書き換える方法は?

エクストラの設定方法:

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() が true の場合にのみ実行する必要があるため、この値は最初に押した後もずっと true のままで、チェックを外しても更新されないことを意味します。チェックボックス1.

4

1 に答える 1

1

アラームを再作成する前に、最初のアラームをキャンセルしてください。これを行うには、 を再作成し、Intentで cancel を呼び出します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 に答える