2013-07-10 6 views

Odpowiedz

13

jeśli anulujesz poprzednie alarmy, to w PendingIntent Twoja flaga powinna być PendingIntent.FLAG_CANCEL_CURRENT. Zapobiega generowaniu nowego obiektu PendingIntent, jeśli został już utworzony. Upewnij się, że przed ustawieniem alarmu, anuluj ten sam PendingIntent, a następnie ustaw alarm. Powinieneś spróbować tak:

AlarmManager 2AlarmsInWeekAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
PendingIntent pendingIntent = PendingIntent.getService/getActivity(context, int, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

2AlarmsInWeekAlarmManager.cancel(pendingIntent); 

, a następnie możesz użyć metody set or setRepeating. W Twoim przypadku powinno być

2AlarmsInWeekAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, "timeInMillis", "repetitionTimeInMillis", pendingintent); 

Gwarantuje to, że przed ustawieniem alarmu spowoduje anulowanie wszystkich wcześniej alarm z tej samej PendingIntent.

Mam nadzieję, że to masz!

+0

Potrzebuję wyjaśnienia. Polecenie cancel() mówi "Usuń wszystkie alarmy z pasującym intencją". Czy to oznacza, że ​​kod żądania im getBroadcast (kontekst kontekstowy, int requestCode, intent intent, int flagi) musi być taki sam? Proszę o wyjaśnienie. – user2731584

+1

Witam, dokument nie mówi wiele o 'requestCode'. Ale jeśli zobaczysz 'getBroadcast' w [PendingIntent] (http://developer.android.com/reference/android/app/PendingIntent.html), który mówi, to pobiera' PendingIntent'. Więc ** według mojej wiedzy ** jeśli umieścisz inny 'requestCode's wtedy dostaniesz 2 różne' PendingIntent's, więc podczas anulowania będzie to drugi 'PendingIntent' zamiast pożądanego! Zobacz także [ten link] (http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_CANCEL_CURRENT). – thegiga

+0

Dzięki za skontaktowanie się z nami. Pozwól mi ponownie przeczytać dokumentację. Wciąż i tak nie widziałem, żeby poprosić o listę alarmów zaplanowaną przez klasę. Dowolny pomysł? – user2731584