2015-03-08 32 views
6

Bunun gibi aynı sorunu yerine getirdim. Delete alarm from AlarmManager using cancel() - AndroidAlarmManager'dan alarm nasıl iptal edilir

" oluşturmak ve hem. Mantık uygulamasında farklı anlarda denir iki farklı yöntemlerle bir alarm silmeye çalışıyorum.

Ancak AlarmManager en iptal() yöntemini çağırdığınızda alarm silinmez. " ayarlamak için

:

  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); 

silmek için:

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); 

Ama bu kayıtlı bir alarm kaldırmaz. Şimdiden teşekkürler.

cevap

16

PendingIntent, AlarmManager'ı başlattığınızda olduğu gibi tam olarak oluşturulması gerekir ve ana sorun, farklı bir requestCode (sıfır yerine bir) kullandığınız gibi görünüyor.

hızlı bir düzeltme için

, bu çalışması gerekir:

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); 

PendingIntent.FLAG_UPDATE_CURRENT bayrağını kullanmak için aşağıya bakınız:

Ayar:

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); 

iptal:

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. Meseleyi görüyorum. Aynı requestCode kullanmalıydım! Yardımın için çok teşekkürler, –

0

Başlangıçta benim için de işe yaramadı, Birçok gönderiyi gördükten sonra, iptal edilmek üzere bekleyen niyetin, alarmı planlamak için kullanılan asıl bekleyen niyetle aynı olması gerektiğini fark ettim. İptal edilmek üzere beklemede olan amaç, aynı eylemi ve aynı veri alanlarını ayarlamalıdır, eğer varsa bunlar alarmı ayarlamak için kullanıldı. Aynı ACTION ve veri değerlerini ayarlamamış olmama rağmen, sadece Alarmı iptal ettim.

İlgili konular