Из моего собственного приложения, которое я разрабатываю, если будильник установлен в течение времени, когда телефон выключен, он был выполнен на следующий телефон на/ботинке. То есть без приемника для присутствия BOOT_COMPLETED. Я не уверен, что это ожидаемое поведение или нет, или же оно согласовано по телефонным вариантам.
Я считаю, что если вы хотите, чтобы ваш будильник выполнял намерение в указанное время, вам нужно использовать getBroadcast PendingIntent с WakeLock, так как другие варианты PendingIntent не гарантируют, что телефон будет оставаться достаточно долго, прежде чем он выключится вниз опять. Это информация из другого сообщения здесь CommonsWare, которое я попытаюсь найти и связать.
Я считаю, что вы можете удалить pendingintent отправляется менеджеру сигнализации, используя, например, функцию, как:
public void unregisterEvent(PendingIntent sender) { ((AlarmManager) this.getSystemService(Context.ALARM_SERVICE)).cancel(sender); }
где PendingIntent был создан именно в качестве первоначальной цели вы пытаетесь Удалить. Вы можете обновить его, предоставляя правильный идентификатор вместе с новым PendingIntent при повторном вызове AlarmManager:
AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);
Это то, что я использую для создания/отстроить PendingIntent:
PendingIntent.getService(this, uniqueIndexToIntent, theIntentItself, PendingIntent.FLAG_UPDATE_CURRENT);
флаг обновит намерение, если оно уже существует, или создаст новое в противном случае.
«отменить/обновить в ожидании намерения в службе» - в чем причина? – Olegas