2017-01-02 2 views
0

Ich habe den folgenden Link https://developer.android.com/training/scheduling/alarms.html folgen.Einstellung Benachrichtigung mit AlarmManager durch Übergabe calendar.getTimeInMillis(), löst sofort Benachrichtigung nicht zum gewünschten Zeitpunkt

RTC Beispiele zuerst, um einen Alarm für eine bestimmte Zeit an allen Tagen einzustellen. Auch nach dem Folgen des gleichen Codes wird der Alarm nicht zu der Zeit ausgelöst, zu der er ausgelöst werden soll. Stattdessen wird die notification sofort nach dem Einstellen der Zeit ausgelöst, die mit Hilfe einer Zeitauswahl erfolgt. Es folgt mein Code-Schnipsel,

AlarmManager alarmMgr = (AlarmManager)  getSystemService(Context.ALARM_SERVICE); 
Intent intent = new Intent(this, NotificationReceiver.class); 
PendingIntent intentalarm = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.set(Calendar.HOUR_OF_DAY,4); 
    calendar.set(Calendar.MINUTE, 30); 

    alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, intentalarm); 

Statt setRepeating Ich habe auch versucht setInexactRepeating aber es gab würde kein luck.I auch, dass hinzufügen, wenn es das geändert

calendar.getTimeInMillis() und verwenden SystemClock.elapsedRealtime() + 120 * 1000 der Alarm ausgelöst genau nach 2 Minuten von der Zeit, als es eingestellt wurde.

Aber wenn calendar.getTimeInMillis() verwendet wird, geschieht die beabsichtigte Arbeit nicht stattdessen stattdessen sofortige Auslösung auftritt.

Wäre in der Tat sehr hilfreich, wenn jemand mir helfen kann, eine Lösung zu finden. Nur für eine Anmerkung, könnte ich lernen, wenn Alarm vor der aktuellen Gerätezeit gesetzt wird, würde der Alarm sofort ausgelöst werden, aber das ist hier nicht der Fall.

NotificationReceiver.class funktioniert einwandfrei, wie es generiert wird und auf dem Titel angezeigt wird. Aber die Zeit, die es erscheint, ist der Grund zur Sorge.

Antwort

0

Sie verwenden sowohl setTimeInMillis als auch Stunde und Minute.

Wenn Sie möchten, dass Ihr Wecker um 4:30 Uhr ausgelöst wird, fügen Sie einfach Stunde und Minute hinzu.

Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR_OF_DAY,4); 
calendar.set(Calendar.MINUTE, 30);` 
0

Ich konnte das Problem identifizieren, dem ich gegenüberstand. Ich benutzte einen TimePicker mit 24-Stunden-Format. Aber ich habe SimpleDateFormat "hh: mm" benutzt. Was "h" bedeutet, ist wie folgt "h-> Stunde in am/pm (1-12)". Also wird jeder Alarm, den ich auf AM gesetzt habe, korrekt ausgelöst. Wenn ich eine Zeit bei PM einstelle, da ich das 1-12 "h" -Format verwendet habe, wird der Alarm für eine AM-Zeit eingestellt, und da diese Zeit im Vergleich zur Gerätezeit bereits verstrichen ist, wurde der Alarm/die Benachrichtigung sofort ausgelöst zu verwenden war "HH: MM", wobei "H" für "H-> Stunde in Tag (0-23)" steht. Das hat mein Problem gelöst.

Die Überprüfung der TimeinMillis auf Online-Epochen-Zeit-Konverter half mir, dieses Problem zu identifizieren.Einmal danke, dass Sie mir geholfen haben.

Verwandte Themen