2015-03-08 18 views
6

Ho incontrato lo stesso problema come questo. Delete alarm from AlarmManager using cancel() - AndroidCome cancellare l'allarme da AlarmManager

" sto cercando di creare ed eliminare un allarme in due diversi metodi che sono entrambi chiamati in momenti diversi nell'applicazione. Logica.

Tuttavia quando chiamo il metodo di AlarmManager annullare(), la l'allarme non è cancellato. "

Al fine di impostare:

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

Al fine di eliminare:

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

Ma questo non elimina un allarme registrato. Grazie in anticipo.

risposta

16

Il PendingIntent deve essere creato esattamente com'era quando si avvia AlarmManager e sembra che il problema principale sia l'utilizzo di un codice di richiesta diverso (zero anziché uno).

Per una soluzione rapida, questo dovrebbe funzionare:

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

Per poter utilizzare PendingIntent.FLAG_UPDATE_CURRENT bandiera, vedere sotto:

Ambito:

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

Annullamento:

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. Vedo il problema Avrei dovuto usare lo stesso requestCode! Grazie mille per il vostro aiuto, –

0

Inizialmente anche per me non funzionava, dopo aver visto molti post mi sono reso conto che l'intenzione in sospeso di essere cancellata dovrebbe essere la stessa dell'intento originale in sospeso utilizzato per programmare l'allarme. L'intenzione in sospeso da annullare dovrebbe essere impostata sulla stessa azione e sugli stessi campi dati, se ce ne sono stati per impostare l'allarme. Dopo aver impostato gli stessi valori di AZIONE e dati anche se non li sto utilizzando, ha annullato l'allarme.