75 votes

Android: Obtenir tous les éléments en attente définis avec AlarmManager

Je mets une alarme comme ceci:

 alarmManager.set(AlarmManager.RTC_WAKEUP, alarmTime, pendingEvent);
 

Je suis intéressé à supprimer toutes les alarmes qui étaient précédemment définies, les effacer.

Existe-t-il un moyen de le faire ou d’obtenir toutes les alarmes actuellement définies pour pouvoir les supprimer manuellement?

Merci,

87voto

gilsaints88 Points 495

Vous n'avez pas à garder de référence. Il suffit de définir une nouvelle PendingIntent comme exactement le même que celui que vous avez défini lors de la création.

Par exemple:

si j'ai créé un PendingIntent pour être déclenché par le AlarmManager comme ceci:

   Intent alarmIntent = new (getApplicationContext(), AlarmBroadcastReceiver.class);
    alarmIntent.setData(Uri.parse("custom://" + alarm.ID));
    alarmIntent.setAction(String.valueOf(alarm.ID));
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

    PendingIntent displayIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, alarmIntent, 0);

    alarmManager.set(AlarmManager.RTC_WAKEUP, alarmDateTime, displayIntent);

Puis, quelque part dans votre code (même d'une autre activité), vous pouvez le faire pour annuler:

Intent alarmIntent = new (getApplicationContext(), AlarmBroadcastReceiver.class);
alarmIntent.setData(Uri.parse("custom://" + alarm.ID));
alarmIntent.setAction(String.valueOf(alarm.ID));
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

PendingIntent displayIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, alarmIntent, 0);

alarmManager.cancel(displayIntent);

La chose importante ici est de définir le PendingIntent avec exactement les mêmes données et d'action, et d'autres critères comme indiqué ici http://developer.android.com/reference/android/app/AlarmManager.html#cancel%28android.app.PendingIntent%29

66voto

Alex Volovoy Points 34562

Vous devez créer votre intention en attente, puis l'annuler

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

    Intent updateServiceIntent = new Intent(context, MyPendingIntentService.class);
    PendingIntent pendingUpdateIntent = PendingIntent.getService(context, 0, updateServiceIntent, 0);

    // Cancel alarms
    try {
        alarmManager.cancel(pendingUpdateIntent);
    } catch (Exception e) {
        Log.e(TAG, "AlarmManager update was not canceled. " + e.toString());
    }
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X