web-dev-qa-db-fra.com

Android AlarmManager: existe-t-il un moyen d'annuler TOUTES les alarmes définies?

Je suis en train de créer une application qui définit 2 alarmes pour chaque jour de la semaine (à une certaine heure et minute), les alarmes se répètent pour toujours semaine après semaine.

Maintenant, le point est le suivant: si l'utilisateur modifie les alarmes, je devrai annuler les alarmes précédemment définies.

Existe-t-il un moyen d'annuler simplement toutes les alarmes définies par mon application?

15
Lisa Anne

Je pense que vous pourriez avoir un œil sur: AlarmManager.Cancel

Et sur cette question/réponse: Android: Obtenez tous les PendingIntents définis avec AlarmManager

Comme indiqué ici, vous ne pouvez pas demander à AlarmManager de vous dire ce qu'il y a en attente. Mais je pense que vous pouvez créer un PendingIntent similaire à celui que vous souhaitez annuler;).

10
BigbangRevo

si vous annulez les alarmes précédentes, dans PendingIntent votre indicateur devrait être PendingIntent.FLAG_CANCEL_CURRENT. Cela empêchera de générer un nouveau PendingIntent s'il est déjà créé. Et assurez-vous qu'avant de régler l'alarme, annulez simplement la même PendingIntent et ensuite définissez votre alarme. Vous devriez essayer comme ceci:

AlarmManager 2AlarmsInWeekAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getService/getActivity(context, int, intent, PendingIntent.FLAG_CANCEL_CURRENT);

2AlarmsInWeekAlarmManager.cancel(pendingIntent);

puis vous pouvez utiliser la méthode set ou setRepeating. Dans votre cas, cela devrait être

2AlarmsInWeekAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, "timeInMillis", "repetitionTimeInMillis", pendingintent);

Cela garantit qu'avant de définir une alarme, toutes les alarmes précédemment annulées seront annulées avec le même PendingIntent.

J'espère que vous l'avez!

17
imthegiga