Ich versuche einen AlarmManager alle 3 Minuten laufen zu lassen, aber er läuft zu falschen und unterschiedlichen Zeiten, Momente in Sekunden und andere laufen nicht. Ich versuche auf einem Android 7.0 und einem anderen 6.0-Gerät zu testen und beide laufen falsch, ich sah die folgenden Kommentare, konnte aber nicht beheben.AlarmManager läuft zur falschen Zeit
Alarm Manager Example AlarmManager fires alarms at wrong time Android AlarmManager fire at wrong time
den folgenden Code:
long repeatTime = 180000;
AlarmManager processTimer = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intentAlarm = new Intent(context, TimerProcessReceiver.class);
PendingIntent pendingIntentAlarm = PendingIntent.getBroadcast(context, 0,
intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
if (android.os.Build.VERSION.SDK_INT < 19) {
processTimer.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),
repeatTime, pendingIntentAlarm);
} else {
processTimer.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() +
repeatTime, pendingIntentAlarm);
}
immer noch Probleme habe ich, wie oben aktualisiert. Update als @ Vyacheslav Antwort
long repeatTime = 180000 + System.currentTimeMillis();
AlarmManager processTimer = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intentAlarm = new Intent(context, ProcessReceiver.class);
PendingIntent pendingIntentAlarm = PendingIntent.getBroadcast(context, 0,
intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
int currentapiVersion = Build.VERSION.SDK_INT;
if (Build.VERSION.SDK_INT >= 23) {
processTimer.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,
repeatTime, pendingIntentAlarm);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
processTimer.setExact(AlarmManager.RTC_WAKEUP,
repeatTime, pendingIntentAlarm);
} else if (currentapiVersion < Build.VERSION_CODES.KITKAT) {
processTimer.set(AlarmManager.RTC_WAKEUP, repeatTime,
pendingIntentAlarm);
}
Falls ich bin mit zwei gleichzeitigen Timer mit dem PendingIntent von ids 0 und 1 (aber die Struktur der Zugabe dieser PendingIntent sind die gleiche wie der Code oben), aber mit der gleichen Laufzeit 3 Minuten. Beide führen den falschen Weg in ein paar Sekunden und zufällig.
versuchen diese System.currentTimeMillis einzuloggen() + REPEAT und überprüfen Zeit hier https://www.epochconverter.com/ – xbadal
TimerProcessReceiver.class Paste – xbadal
auch> versuchen, diese https : //stackoverflow.com/questions/44204387/alarmmanager-setinexactrepeating-setwindow-setrepeating-methods-do-not-fire-al/44205413#44205413 –