Повторять задачу ежедневно в определенное время для SDK-версии> = 24 - PullRequest
0 голосов
/ 08 марта 2019

Я ищу возможность выполнять задачу ежедневно в определенное время в 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 секунд (?), Что заставляет счетчик каждый раз сбрасывать шаги. Итак, мой вопрос: есть ли вероятность, что какое-то событие может быть запущено, как описано выше, для решения задачи?

...