Я использую AlarmManager
для планирования где угодно между 1 и 35 сигналами тревоги (в зависимости от ввода пользователем). Когда пользователь запрашивает расписание новых аварийных сигналов, мне нужно отменить текущие аварийные сигналы, поэтому я создаю все свои аварийные сигналы с одним и тем же кодом запроса, определенным в переменной final
.
// clear remaining alarms
Intent intentstop = new Intent(this, NDService.class);
PendingIntent senderstop = PendingIntent.getService(this,
NODIR_REQUESTCODE, intentstop, 0);
am.cancel(senderstop);
// loop through days
if (sched_slider.getBooleanValue())
for (int day = 1; day < 8; day++) {
if (day == 1 && sun.isChecked())
scheduleDay(day);
if (day == 2 && mon.isChecked())
scheduleDay(day);
if (day == 3 && tue.isChecked())
scheduleDay(day);
if (day == 4 && wed.isChecked())
scheduleDay(day);
if (day == 5 && thu.isChecked())
scheduleDay(day);
if (day == 6 && fri.isChecked())
scheduleDay(day);
if (day == 7 && sat.isChecked())
scheduleDay(day);
}
...
public void scheduleDay(int dayofweek) {
Intent toolintent = new Intent(this, NDService.class);
toolintent.putExtra("TOOL", "this value changes occasionally");
PendingIntent pi = PendingIntent.getService(this,
NODIR_REQUESTCODE, toolintent, 0);
calendar.set(Calendar.DAY_OF_WEEK, dayofweek);
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, 0);
am.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY * 7, pi);
}
Здесь, если пользователь имеет sun
(который является CheckBox), он будет планировать будильник, который будет выполняться каждое воскресенье в hour
и minute
. Вы можете видеть, что каждый созданный таким образом аварийный сигнал имеет один и тот же requestCode, но TOOL
дополнительно изменяется для каждого аварийного сигнала.
Однако, в моем тестировании, когда будильник отключается, и моя служба работает, дополнительные функции от намерения теперь null
. Этот вопрос предполагает, что использование PendingIntent.FLAG_CANCEL_CURRENT
решит это, но не отменило бы другие PendingIntents?
Короче:
Может ли кто-нибудь объяснить, как работает PendingIntents, в отношении создания нескольких из них с одним и тем же кодом запроса и различными дополнительными функциями? Какие флаги (если есть) я должен использовать?