Я устанавливаю сигналы тревоги с помощью этого кода
//in onCreate()
mAlarmManager = (AlarmManager) getApplicationContext()
.getSystemService(ALARM_SERVICE);
//called for each timer I schedule
Intent intent = new Intent (Intents.MY_INTENT_ACTION);
PendingIntent pendIntent = PendingIntent.getBroadcast(
getApplicationContext(), alert.getID(),
intent, PendingIntent.FLAG_ONE_SHOT);
long delay = 1000 * alert.getDuration();
Calendar cal = Calendar.getInstance();
mAlarmManager.set(AlarmManager.RTC_WAKEUP,
cal.getTimeInMillis() + delay, pendIntent);
Но поведение, которое я вижу, не соответствует тому, что я должен видеть в документации 1 ,
public void set (тип int, long triggerAtTime, операция PendingIntent)
Если для того же IntentSender уже запланирован сигнал тревоги, он сначала будет отменен ... Если уже естьТревога для этого намерения запланирована (с равенством двух намерений, определяемых filterEquals (Intent)), затем он будет удален и заменен этим ...
, который предполагает, что вызывающий набор (inttype, long triggetAtTime, операция PendingIntent) для уже тревожного намерения должно заменить старый сигнал тревоги для этого намерения.Я не вижу, чтобы какие-либо тревоги сбрасывались.Вместо этого, каждый сигнал тревоги, который я установил, срабатывает, несмотря на то, что все намерения, инициированные ожидающими намерениями, должны совпадать (по filterEquals (intent)), поскольку все, что я установил для каждого намерения, является идентичным действием.
Я делаю что-то не так, или API не работает так, как задокументировано?
Примечание: изменение экземпляра PendingIntent на
PendingIntent pendIntent = PendingIntent.getBroadcast(
getApplicationContext(), CONSTANT_ID,
intent, PendingIntent.FLAG_ONE_SHOT);
ведет себя как положено, сбрасывает любой уже установленный сигнал тревогизаменить его новым сигналом тревоги.