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

AlarmManager setRepeating() fires at incorrect time

我试图让 AlarmManager 在早上 8 点启动,但问题是当我 运行 这个应用程序在 21:00(或任何其他时间)启动我的 NotificationService class 显示当前时间的通知,而不是定义的早上。

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