2013-06-19 6 views
1

Я создаю alaram в мое приложение, которое вызывающей BroadcastReceiver для уведомлений установки когда-либо день с этим кодом:Переписать существующий сигнал тревоги

Intent intent = new Intent(Benachrichtigung.CUSTOM_INTENT); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR_OF_DAY, 8); 
calendar.set(Calendar.MINUTE, 00); 
calendar.set(Calendar.SECOND, 00); 

alram = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
alram.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), (24 * 60 * 60 * 1000), pendingIntent); 

Теперь я хочу, чтобы пользователь мог установить время для norification поэтому у меня есть для вызова calendar.set с новым значением. Как перезаписать существующий аварийный сигнал на новый?

+0

Какая у вас проблема? Разве это не переписывает его сейчас? – codeMagic

+0

Если я назову именно этот код с другим часом, например, 'calendar.set (Calendar.HOUR_OF_DAY, 9)' он перезаписывает старый сигнал тревоги автоматически? Итак, старый будильник с 8 удаленными, а новый с 9 создан автоматически? – Cilenco

+0

Вы проверили его еще, чтобы узнать, что происходит? – codeMagic

ответ

7

Чтобы отменить или обновить сигнал тревоги с помощью AlarmManager, Intent должен соответствовать параметру filterEquals. Таким образом, в основном, вы воссоздаете PendingIntent так же, как и для оригинала, и AlarmManager увидит, что они одинаковы. Это включает в себя REQUEST_CODE, INTENT_ACTION и INTENT_DATA (я может отсутствовать что-то там, но те важны

Примечание:..

EXTRAS не используются при сравнении двух Intent сек

Так что если два Intent s равны, тогда первая будет перезаписана. Когда у меня будет больше времени, я могу попытаться найти ресурс, чтобы лучше объяснить это.

Acc Оверсия до Intent Docs filterEquals

Определите, являются ли два намерения одинаковыми для целей разрешения (фильтрации) намерений. То есть, если их действие, данные, тип, класс и категории одинаковы. Это не сравнивает никаких дополнительных данных, включенных в намерения.

+0

Большой ответ спасибо за вашу помощь! То, как я тестировал его с вами, было здорово узнать немного больше об андроиде! Спасибо за это. – Cilenco

+0

Добро пожаловать! Рад, что смог помочь. Я стараюсь передать то, что я узнал от великих членов SO, таких как Сэм, проспек, прагнани, здравый смысл и другие. Который объясняет, почему/как все работает, часто гораздо более полезно, чем просто предоставление кода :) – codeMagic

+0

Просто чтобы быть понятным, 'Context' не имеет значения? У меня разные части моего приложения в разных классах, вызывающие мою старую функцию AlarmUtil setAlarm, и я беспокоюсь, что могу просто создать несколько аварийных сигналов. И продолжительность тревоги? –

Смежные вопросы