2016-07-25 21 views
-1

Ich habe ein Formular erstellt, wo Benutzer Datum und Uhrzeit angeben und Alarm hinzufügt. Ich nehme dieses Datum und die Uhrzeit und erstelle Alarm mit AlarmManager.AlarmManager Alarm sofort starten

Das Problem ist, dass, sobald ich auf CreateRemainder Schaltfläche klicken, wird Alarm ausgelöst wird

ich folgende Methode bin mit Datum zu übergeben, Zeitwert zu AlarmManager Klasse.

int year= Integer.parseInt(splitDate[0]); 
int month= Integer.parseInt(splitDate[1]); 
int day= Integer.parseInt(splitDate[2]); 

int hour= Integer.parseInt(splitTime[0]); 
int minute= Integer.parseInt(splitTime[1]); 
int second= 0; 


Calendar cal = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault()); 
cal.set(Calendar.DATE,day); //1-31 
cal.set(Calendar.MONTH,month-1); //first month is 0!!! January is zero!!! 
cal.set(Calendar.YEAR,year);//year... 

cal.set(Calendar.HOUR_OF_DAY, hour); //HOUR 
cal.set(Calendar.MINUTE, minute);  //MIN 
cal.set(Calendar.SECOND, second); 

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent); 

Ich debug diese und seine richtigen Werte zu bekommen, aber es startet sofort Alarm. Wenn ich die AlarmManager Zeit zu hart kodierten 10 Sekunden Zeit ändere, beginnt es Rest nach 10 Sekunden.

alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (10 * 1000), pendingIntent); 

Aber wenn ich 10 Sekunden zum Kalender addiere, fängt es sofort an, Alarm sofort anzuzeigen, nachdem es eingestellt worden ist.

alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis()+10000, pendingIntent); 
+0

Statt 'Systemzeit' bekommen' Alarmmanager' Zeit. –

+0

@ Kirmani88 .. Ich sah, dass Sie meine Antwort akzeptiert ... Könnten Sie bitte meine Antwort kommentieren und uns sagen, wie Sie behoben? Für zukünftige Referenz ... – W0rmH0le

Antwort

1

Normalerweise, wenn der Alarm so schnell gefeuert wird, wie Sie es festgelegt, bedeutet dies, dass geplante Zeit hinter aktuelle Zeit ist ... Also, Alarmmanager feuert es imediatelly

Ich schlage vor, Debug-Meldungen zu debuggen hinzuzufügen. Etwas wie:

Log.d("DEBUG", "Time from device: " + Calendar.getInstance().getTimeInMillis() + " Time passed to alarm: " + cal.getTimeInMillis()); 

Dann können Sie Current Millis Website überprüfen und prüfen, ob beide Male korrekt sind .. Überprüfen Sie, ob cal wirklich ein Datum in der Zukunft ist

Auch, wenn Sie eine Zeit hinzugefügt werden soll Kalender, verwenden Sie wie folgt Calendar.add() Methode:

Calendar cal = Calendar.getInstance(); 

cal.add(Calendar.SECOND, 10); 

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent); 
+0

Das Hauptproblem war im Monat, ich subtrahierte -1 vom Monat, deshalb startet es den Alarm direkt nach dem Hinzufügen weil es einen Monat alt war. – Kirmani88

1

verwenden:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
     alarmManager.setExact(AlarmManager.RTC, cal.getTimeInMillis(), pendingIntent); 
    } else { 
     alarmManager.set(AlarmManager.RTC, cal.getTimeInMillis(), pendingIntent); 
    } 

Wenn Ihr Alarm sofort als meine Vermutung genannt zu werden, ist Ihr cal ‚s Datum vor heute.

+0

Danke, da ich irgendwo gelesen habe, dass 'firstMonth' 0 ist, so subtrahiere ich -1 von was auch immer der Monat ich bekomme, ist es in Ordnung oder ich muss den gleichen Monat in den Kalender legen. – Kirmani88

+0

Vielleicht erhalten Sie Ihre Daten nicht direkt aus 'splitDate', aber der Code Ihres Alarms sieht gut aus –