0

Je ne sais pas si le titre est clair ou non, mon problème avec le gestionnaire de notification est que lorsque je définis les heures comme (1:00, 2:00, 3:00, 4:00) et le temps est maintenant 2h30, la notification normale attendra jusqu'à 3h00 puis 4h00, mais dans mon code le gestionnaire de notification me donne deux alertes pour 1h00 et 2h00 parce que les sont dans le passé, puis attendre jusqu'à 3h00 et notifier alors 4h00 et notifier, donc mon problème est avec le temps passé je ne veux pas recevoir de notification pour eux.Comment faire pour que le gestionnaire de notification n'obtienne pas les heures passées?

mon code principal class.java, alertTimes est un tableau qui ont les temps en milliseconde

for (int i = 0; i < alertTimes.length; i++) { 
      inte = new Intent(this, AlertMedicine.class); 
      inte.putExtra("id", i); 
      inte.putExtra("name", NameOftimes[i]); 
      alarmManager.set(AlarmManager.RTC_WAKEUP, alertTimes[i], PendingIntent.getBroadcast(this, 1, inte, PendingIntent.FLAG_UPDATE_CURRENT)); 

     } 

AlertReceiver.java

createNotification(context, "OK", "OK", "OK" + j, 1, 0); 

J'essaie aussi AlertReceiver.java de le faire, mais cela aussi ne fonctionne pas

if(calendar.get(Calendar.HOUR_OF_DAY)< Integer.parseInt(arr[id].substring(0, 2))) { 
      createNotification(context, "OK", "OK", "OK" + j, 1, 0); 

     } 
     else 
     if(calendar.get(Calendar.HOUR_OF_DAY)== Integer.parseInt(arr[id].substring(0, 2))){ 

      int min=Integer.parseInt(arr[id].substring(3, 5))+2; 
      if(calendar.get(Calendar.MINUTE) <= min){ 
       createNotification(context, "OK", "OK", "OK" + j, 1, 0); 
+0

Pour coups de pied, ce qui se passe lorsque vous passez l'évaluation de l'heure actuelle HOUR_OF_DAY au moment où vous vérifiez à plus de? –

+0

il ne me donne pas la prochaine notification suivante, comme dans mon exemple (1:00, 2:00, 3:00, 4:00) et l'heure est 2:30, il ne me donnera pas 3:00 notifier, il faudra attendre 4:00 –

Répondre

0

Vous devez planifier les alarmes pour l'avenir seulement parce que set() déclenchera l'alarme immédiatement si le temps de déclenchement indiqué est dans le passé. Voir la doc ci-dessous:

ensemble public void (type int, long triggerAtMillis, PendingIntent opération) Ajouté au niveau de l'API 1

Planifier une alarme. Note: pour les opérations de chronométrage (ticks, timeouts, etc.) il est plus facile et beaucoup plus efficace d'utiliser Handler. Si est déjà une alarme programmée pour le même IntentSender, l'alarme précédente sera d'abord annulée. Si l'heure de déclenchement indiquée est , l'alarme sera déclenchée immédiatement. S'il y a déjà une alarme pour cette intention programmée (avec l'égalité de deux intentions étant définie par filterEquals (Intent)), alors elle sera supprimée et remplacée par celle-ci.

Donc, pour fixer votre chèque de problème si le temps d'alarme, vous devez définir est à l'avenir ou non, réglez seulement il ignore par ailleurs,

for (int i = 0; i < alertTimes.length; i++) { 
     if(alertTimes[i] >= System.currentTimeMillis()){ 

       inte = new Intent(this, AlertMedicine.class); 
       inte.putExtra("id", i); 
       inte.putExtra("name", NameOftimes[i]); 
       alarmManager.set(AlarmManager.RTC_WAKEUP, alertTimes[i], PendingIntent.getBroadcast(this, i+1, inte, PendingIntent.FLAG_UPDATE_CURRENT)); 
     } 
    } 
+0

merci ça marche! –

+0

mais il suffit de me donner la première notification de la boucle, savez-vous comment y remédier? il semble que son ne va pas dans la boucle pour tous les temps :( –

+0

s'il vous plaît si vous pouvez m'aider –