0

Ich weiß nicht, ob der Titel klar ist oder nicht, mein Problem mit dem Benachrichtigungsmanager ist, dass wenn ich die Zeiten als (1:00, 2:00, 3:00, 4:00) einstelle und die Zeit jetzt ist 2:30, die normale Benachrichtigung wird bis 3:00 dann 4:00 warten, aber in meinem Code gibt mir der Benachrichtigungsmanager zwei Warnungen für 1:00 und 2:00, weil die in der Vergangenheit sind, dann warten bis 3:00 und benachrichtige mich dann um 4:00 Uhr und melde mich, damit mein Problem mit der Zeit in der Vergangenheit ist. Ich möchte keine Benachrichtigung für sie bekommen.Wie kann der Benachrichtigungsmanager die Zeiten in der Vergangenheit nicht bekommen?

meinen Code Haupt class.java, alertTimes ist ein Array, das die Zeiten in Millisekunden haben

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

Ich versuche auch in AlertReceiver.java dies zu tun, aber dies funktioniert auch nicht

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

Für Tritte, was passiert, wenn Sie die Auswertung wechseln von der aktuellen HOUR_OF_DAY zu der Zeit, die Sie auf größer als überprüfen? –

+0

es gibt mir nicht die nächste erste Benachrichtigung, wie in meinem Beispiel (1:00, 2:00, 3:00, 4:00) und die Zeit ist 2:30, wird es mir nicht 3:00 mitteilen, es wird bis 4:00 warten –

Antwort

0

Sie sollten die Alarme planen nur für zukünftige Zeit, weil set() den Alarm sofort auslöst, wenn die angegebene Auslösezeit in der Vergangenheit liegt. Siehe doc unter:

public void set (int-Typen, lange triggerAtMillis, PendingIntent Betrieb) Hinzugefügt in API-Ebene 1

Zeitplan einen Alarm. Hinweis: Für Timing-Vorgänge (Ticks, Timeouts usw.) ist es einfacher und viel effizienter, Handler zu verwenden. Wenn bereits ein Alarm für denselben IntentSender geplant ist, wird der vorherige Alarm zuerst abgebrochen. Wenn die angegebene Auslösezeit in der Vergangenheit liegt, wird der Alarm sofort ausgelöst. Wenn bereits ein Alarm für diese Absicht geplant ist (wobei die Gleichheit der beiden Absichten durch filterEquals (Intent) definiert wird), wird er entfernt und wird durch diesen ersetzt.

Also, Ihr Problem Prüfung zu beheben, wenn die Alarmzeit Sie einstellen müssen in Zukunft ist oder nicht, dann setzen sie sonst nur ignorieren,

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

danke es funktioniert! –

+0

aber es gibt mir nur die erste Benachrichtigung von der Schleife, weißt du, wie man es repariert? es scheint, als ob es nicht für alle Zeiten in die Schleife geht :( –

+0

bitte, wenn Sie mir helfen können –

Verwandte Themen