comment définir plusieurs alarmes en utilisant le gestionnaire d’alarme Android

Je construis une application d’alarme. J’ai implémenté avec succès des fonctions d’alarme de base.

Calendar calendar = Calendar.getInstance(); calendar.set(calendar.HOUR_OF_DAY, sHour); calendar.set(calendar.MINUTE, sMin); calendar.set(calendar.SECOND, 0); calendar.set(calendar.MILLISECOND, 0); long sdl = calendar.getTimeInMillis(); Intent intent = new Intent(AlarmList.this, AlarmReceiver.class); PendingIntent sender = PendingIntent.getBroadcast(AlarmList.this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager ALARM1 = (AlarmManager)getSystemService(ALARM_SERVICE); ALARM1.set(AlarmManager.RTC_WAKEUP, sdl, sender); 

Dans mon application, l’utilisateur peut sélectionner des jours (dimanche, lundi …) pour répéter l’alarme chaque semaine. J’essaie de créer plusieurs alarmes pour répéter chaque semaine, mais je ne sais pas comment le faire. Puis-je le créer en utilisant (repeate) intervalle ou dois-je créer plusieurs gestionnaires d’alarmes?

Vous devez utiliser different Broadcast id's pour les pending intents . Quelque chose comme ça:

  Intent intent = new Intent(load.this, AlarmReceiver.class); final int _id = (int) System.currentTimeMillis(); PendingIntent appIntent = PendingIntent.getBroadcast(this, _id, intent,PendingIntent.FLAG_ONE_SHOT); 

L’utilisation de l’heure système doit être un identificateur unique pour chaque intention en attente que vous déclenchez.

De la documentation :

S’il y a déjà une alarme pour cet Intent programmé (avec l’égalité de deux intentions étant définies par filterEquals (Intent) , alors il sera supprimé et remplacé par celui-ci

Plusieurs AlarmManagers ne résoudraient pas votre problème. S’ils disposent de plusieurs alarmes différentes (heures et jours différents), vous devez définir l’alarme dans BroadcastReceiver chaque fois que vous déclenchez une alarme précédente.

Vous devez également conserver RECEIVE_BOOT_COMPLETED et avoir un BroadcastReceiver pour recevoir le démarrage afin que, si le téléphone est redémarré, vous pouvez reprogrammer vos alarmes.

Pour définir plusieurs alarmes, vous devez définir votre Intent chaque fois afin de la distinguer des autres. La manière la plus simple de le faire est de définir le champ de data de votre Intent comme suit:

 // give your alarm an id and save it somewhere // in case you want to cancel it in future Ssortingng myAlarmId = ...; // create your Intent Intent intent = new Intent(AlarmList.this, AlarmReceiver.class); intent.setData(Uri.parse("myalarms://" + myAlarmId)); ... 

Le rest de votre code @ Hassy31 est bien tel quel et rest inchangé.

Notez que le paramètre PendingIntent.getBroadcast() méthode PendingIntent.getBroadcast() (comme suggéré par @parag) n’est pas utilisé conformément à la documentation, ce n’est donc pas la bonne façon de s’y prendre.

définir l’ id diffusion pour pendingIntent

 for (int id = 0; id < 3; id++) { // Define pendingintent PendingIntent pendingIntent = PendingIntent.getBroadcast(this, id,ntent, 0); // set() schedules an alarm alarmManager.set(AlarmManager.RTC_WAKEUP, alertTime, pendingIntent); }