Я ищу возможность выполнять задачу ежедневно в определенное время в Android. Более конкретно, это приложение счетчика шагов, которое должно сбрасывать подсчитанные шаги каждый день в полночь. Я попытался использовать Alarmmanager и BroadcastReceiver для решения этой задачи:
private void resetStepsAtMidnight() {
// Zeit für Reset
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(java.util.Calendar.HOUR_OF_DAY, 23);
calendar.set(java.util.Calendar.MINUTE, 59);
calendar.set(java.util.Calendar.SECOND, 0);
Intent intent = new Intent(this, ResetStepsReceiver.class);
PendingIntent alarmIntent = PendingIntent.getBroadcast(this, RC_RESET, intent, PendingIntent.FLAG_UPDATE_CURRENT);
//Zurücksetzen täglich wiederholen
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
if(alarmManager != null) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
//alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY ,alarmIntent);
}
}
Это решение работает нормально, но необходимо, чтобы пользователь открывал приложение как минимум один раз в день, потому что setExactAndAllowWhileIdle не повторяется. Использование второго параметра с setRepeating будет повторять задачу ежедневно, но не является точным, поскольку новое управление энергией Android. Весьма вероятно, что он будет срабатывать после полуночи И в этом случае он будет продолжать срабатывать каждые 40 секунд (?), Что заставляет счетчик каждый раз сбрасывать шаги. Итак, мой вопрос: есть ли вероятность, что какое-то событие может быть запущено, как описано выше, для решения задачи?