2017-12-23 25 views
1

Ich machte einen Kalender Toast in bestimmter Zeit jeden Tag um 20:00 Uhr zeigen aber die App Show starten den Dienst und zeigen den Toast zu unterschiedlichen Zeiten. wieStarten eines Dienstes zu einer bestimmten Zeit jeden Tag

8:00 pm 
8:23 pm 
8:30 pm 
8:32 pm 
8:50 pm 

und hört nicht auf den Toast zeigt

was falsch ist?

das ist mein Mainactivity.java Code

Intent alarmIntent = new Intent(MainActivity.this, MyService.class); 
    pendingIntent = PendingIntent.getService(MainActivity.this, 0, alarmIntent, 0); 

    setAlarm(); 

} 

private void setAlarm() { 
    AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

    /* Set the alarm to start at 8.00 PM */ 
    Calendar calendar = Calendar.getInstance(); 

    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.set(Calendar.HOUR_OF_DAY, 20); 
    calendar.set(Calendar.MINUTE, 00); 
    calendar.set(Calendar.SECOND, 00); 

    //Add a day if alarm is set for before current time, so the alarm is triggered the next day 

    if (calendar.before(Calendar.getInstance())) { 
     calendar.add(Calendar.DAY_OF_MONTH, 1); 
    } 

    manager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), TimeUnit.MILLISECONDS.convert(1, TimeUnit.DAYS), pendingIntent);    

}} 

Antwort

0

Aus der Dokumentation von setRepeating

Hinweis: ab API 19, alle Wiederholung Alarme sind ungenau. Wenn Ihre Anwendung genaue Lieferzeiten benötigt, muss sie einmalige exakte Alarme verwenden, die wie oben beschrieben jedes Mal neu geplant werden. Ältere Anwendungen, deren targetSdkVersion älter als API 19 ist, werden weiterhin alle ihre Alarme, einschließlich der Wiederholung von Alarmen, als genau behandelt behandeln.

EDIT Sie Alarm ist ungenau, so bedeutet dies, dass das System in der genauen Zeit nicht aufwachen Sie 00 eingestellt: 800 Ihre Anforderung zu erfüllen, anstatt wird es Gruppe einige Aktionen, die getan werden muss, irgendwo um die Zeit, die Sie setzen, und feuern sie alle zusammen, um Batterie des Telefons zu sparen, und verhindern, dass das Telefon alle paar Sekunden separat wach wird.

Sie können Ihren Anruf zu nicht wiederholtem Anruf mit AlarmManager.set() ersetzen und die Wiederholung selbst vornehmen, wie in jeder Alarmmeldung die nächste geplant ist.

Oder wenn Ihre Alarmauslösung nicht zeitkritisch ist (sie muss nicht sehr genau sein), können Sie sie so lassen, wie sie ist.

+0

mein api Level 23 ist zu planen. können Sie meine Mainactivity.java bearbeiten, um zu verstehen, bitte – user7216286

+0

Das Zitat oben sagt, dass API 19 und höher (das 23 enthält) wird Ihren wiederholenden Alarm als ungenau setzen. Ich werde die Antwort mit etwas mehr Erklärung aktualisieren – elmorabea

Verwandte Themen