Я устанавливаю будильники, используя этот код
//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 уже запланировано оповещение, оно будет сначала отменено... Если уже запланировано оповещение для этого Intent (с равенством двух намерений, определяемым filterEquals(Intent)), то оно будет удалили и заменили этим...
что предполагает, что вызов set(int type, long triggetAtTime, PendingIntent operation) для уже тревожного намерения должен заменить старое тревожное событие для этого намерения. Я не вижу, чтобы будильники сбрасывались. Вместо этого каждый сигнал тревоги, который я устанавливаю, срабатывает, несмотря на то, что все намерения, которые активируются ожидающими намерениями, должны совпадать (согласно filterEquals(intent)), поскольку все, что я установил для каждого намерения, является идентичным действием.
Я делаю что-то не так, или API ведет себя не так, как описано в документации?
Примечание: изменение экземпляра PendingIntent на
PendingIntent pendIntent = PendingIntent.getBroadcast(
getApplicationContext(), CONSTANT_ID,
intent, PendingIntent.FLAG_ONE_SHOT);
Ведет себя, как и ожидалось, сбрасывая любой уже установленный будильник и заменяя его новым будильником.
alarm.getID()
и использовать0
. - person CommonsWare   schedule 31.10.2011