2015-03-08 14 views
6

Spotkałem ten sam problem jak ten. Delete alarm from AlarmManager using cancel() - AndroidJak anulować alarm z AlarmManager

" Próbuję tworzyć i kasować alarm w dwóch różnych metod, które są zarówno zwanych w różnych momentach w aplikacji. Logika.

Jednakże gdy zgłoszę metody, AlarmManager za anulowanie() alarm nie został usunięty. "

W celu ustalenia:

  Intent myIntent = new Intent(getApplicationContext(), 
        SessionReceiver.class); 
      PendingIntent pendingIntent = PendingIntent.getBroadcast(
        getApplicationContext(), 1, myIntent, 0); 

      AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

      alarmManager.set(AlarmManager.RTC, now.getTimeInMillis(), 
        pendingIntent); 

W celu usunięcia:

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    Intent myIntent = new Intent(getApplicationContext(), 
      SessionReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(
      getApplicationContext(), 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

    alarmManager.cancel(pendingIntent); 

Ale to nie usunąć alarm zarejestrowany. Z góry dzięki.

Odpowiedz

16

PendingIntent musi zostać utworzony dokładnie tak, jak był podczas uruchamiania AlarmManager, i wygląda na to, że głównym problemem jest to, że używasz innego kodu żądania (zero zamiast jednego).

Dla szybkiej i taniej, to powinno działać:

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
Intent myIntent = new Intent(getApplicationContext(), 
     SessionReceiver.class); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(
       getApplicationContext(), 1, myIntent, 0); 

alarmManager.cancel(pendingIntent); 

Aby korzystać PendingIntent.FLAG_UPDATE_CURRENT flagę, patrz poniżej:

Otoczenie:

Intent myIntent = new Intent(getApplicationContext(), 
        SessionReceiver.class); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(
       getApplicationContext(), 1, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

      alarmManager.set(AlarmManager.RTC, now.getTimeInMillis(), 
        pendingIntent); 

Anulowanie:

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    Intent myIntent = new Intent(getApplicationContext(), 
       SessionReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(
      getApplicationContext(), 1, myIntent,  PendingIntent.FLAG_UPDATE_CURRENT); 

alarmManager.cancel(pendingIntent); 
+0

Oh. Widzę problem. Powinienem użyć tego samego requestCode! Dziękuję bardzo za Twoją pomoc, –

0

Początkowo dla mnie również nie zadziałało, Po zobaczeniu wielu postów zorientowałem się, że oczekująca zamiar anulowania powinna być taka sama jak pierwotna zamiar, który był używany do planowania alarmu. Intencja oczekująca na anulowanie powinna mieć ustawione to samo działanie i te same pola danych, jeśli takie zostały użyte do ustawienia alarmu. Po ustawieniu tej samej AKCJI i wartości danych, chociaż ich nie używam, anulowano tylko alarm.