Android AlarmManager setRepeating()在不正确的时间触发

Android AlarmManager setRepeating()在不正确的时间触发,android,alarmmanager,Android,Alarmmanager,我试图让AlarmManager在早上8点启动,但问题是,当我在21:00或任何其他时间运行此应用程序时,它会启动我的NotificationService类,该类显示当前时间的通知,而不是定义的早上 val alarmManager:AlarmManager? = getSystemService(Context.ALARM_SERVICE) as AlarmManager val firingCal:Calendar = Calendar.getInstance().apply {

我试图让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);
问题是这个

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)
}