AlarmManager setRepeating () срабатывает в неправильное время - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь запустить AlarmManager в 8 утра, но проблема в том, что когда я запускаю это приложение в 21:00 (или в любое другое время), оно запускает мой класс NotificationService , который показываетуведомление в текущее время, а не утром, как определено.

val alarmManager:AlarmManager? = getSystemService(Context.ALARM_SERVICE) as AlarmManager
val firingCal:Calendar = Calendar.getInstance().apply {
            set(Calendar.HOUR_OF_DAY,8)
            set(Calendar.MINUTE,0)
            set(Calendar.SECOND,0)
        }

        val serviceIntent: Intent = Intent(this,NotificationService::class.java)
        val mPendingIntent = PendingIntent.getService(this,123, serviceIntent, PendingIntent.FLAG_UPDATE_CURRENT)
        alarmManager?.setRepeating(AlarmManager.RTC, firingCal.timeInMillis, AlarmManager.INTERVAL_DAY, mPendingIntent);

1 Ответ

1 голос
/ 17 мая 2019

Проблема в этом

val firingCal:Calendar = Calendar.getInstance().apply {
        set(Calendar.HOUR_OF_DAY,8)
        set(Calendar.MINUTE,0)
        set(Calendar.SECOND,0)
 }

Вы устанавливаете время на 8:00, но если оно уже прошло с 8:00, оно теперь установлено в прошлое, поэтому будильник срабатывает немедленно.

Вы должны проверить, не прошло ли время 8:00 и добавить 1 к вашему дню:

val firingCal:Calendar = Calendar.getInstance().apply {
        if (get(Calendar.HOUR_OF_DAY) >= 8) {
            add(Calendar.DAY_OF_MONTH, 1)
        }
        set(Calendar.HOUR_OF_DAY,8)
        set(Calendar.MINUTE,0)
        set(Calendar.SECOND,0)
}
...