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!
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
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
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