我正在尝试在我的 Kotlin Android 应用程序中设置一个 AlarmManager,但如果警报已过去,它会立即触发

I'm trying to setup an AlarmManager in my Kotlin Android app, but it triggers immediately if the alarm is in the past

我目前正在尝试制作一个每天早上向用户发送消息的应用程序。但是,如果闹钟的触发时间早于当前时间,当我打开我的应用程序时,我的闹钟会立即触发。

这是我的代码:

这在我的 onCreate 中:

// Get AlarmManager instance
        val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager

        // Intent part
        val intent = Intent(this, AlarmReceiver::class.java)
        intent.action = "FOO_ACTION"
        intent.putExtra("KEY_FOO_STRING", "Alarm triggered!")

        val pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0)

        val calendar: Calendar = Calendar.getInstance().apply {
            timeInMillis = System.currentTimeMillis()
            set(Calendar.HOUR_OF_DAY, 21)
            set(Calendar.MINUTE, 42)
        }

        alarmManager.setRepeating(
                AlarmManager.RTC_WAKEUP,
                calendar.timeInMillis,
                AlarmManager.INTERVAL_DAY,
                pendingIntent
        )

我的接收器就在我的 MainActivity 中:

class AlarmReceiver : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            // Is triggered when alarm goes off, i.e. receiving a system broadcast
            if (intent.action == "FOO_ACTION") {
                val fooString = intent.getStringExtra("KEY_FOO_STRING")
                Toast.makeText(context, fooString, Toast.LENGTH_LONG).show()
                val vibrator = context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
                vibrator.vibrate(200)
            }
        }
    }

我找到了解决我在这个问题中遇到的主要问题之一的方法。如果我希望它触发的日期是过去的日期,我找到了一种方法来防止触发我的警报-

if (calendar.timeInMillis < System.currentTimeMillis()) { // checks if alarm time is earlier than system time
            calendar.add(Calendar.DAY_OF_YEAR, 1) // goes to next day
        }

最初我在这里遇到了另一个问题,但我意识到这可能太多了,无法塞进一个 Whosebug 问题中。我编辑了我的问题以仅包含此问题,并将此代码片段留给将来可能遇到此问题的人。