2012-06-11 4 views
1

Я не могу найти ответ на этот вопрос, но каковы критерии для прохождения в соответствующем PendingIntent, который нужно удалить из будильника? Это он основан на простое имя, например com.blah.package.myclass, или делаете вопрос Extra?Как правильно отменить ожидающие тревоги

Например, я делаю что-то вроде этого, и все тревоги срабатывает тот же намерения:

public void setAlarm(Context context, long nextAlarmMillis) { 
     Intent intent = new Intent(context, AlarmReceiver.class); 
     intent.putExtra("alarm", this); 
     PendingIntent sender = PendingIntent.getBroadcast(context, 1234 /* unused */, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

     // Get the AlarmManager service 
     AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
     am.cancel(sender); 
     am.set(AlarmManager.RTC_WAKEUP, nextAlarmMillis, sender); 
    } 

Что происходит, что Alarm класс может быть изменен, и т.д., и передается в качестве Extra. Я отменяю предыдущий сигнал тревоги, но я не уверен, что он что-то делает, или если останутся остатки тревоги.

Кто-нибудь знает наверняка?

ответ

3

Вслед упоминается в AlarmManager документации

Любые тревоги, любого типа, чьи Намерение матчи это одно (как определено filterEquals (Intent)), будет отменена.

которых, filterEquals() определяется как:

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

Я думаю, что проще всего оставить ссылку PendingIntent, переданную AlarmManager, и передать ее для отмены. Или иметь фабричный метод для построения такого pi.

+0

Ahh, пропустил фильтрEquals(). Спасибо. – Kirk

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