我正在尝试在我的 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 问题中。我编辑了我的问题以仅包含此问题,并将此代码片段留给将来可能遇到此问题的人。
我目前正在尝试制作一个每天早上向用户发送消息的应用程序。但是,如果闹钟的触发时间早于当前时间,当我打开我的应用程序时,我的闹钟会立即触发。
这是我的代码:
这在我的 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 问题中。我编辑了我的问题以仅包含此问题,并将此代码片段留给将来可能遇到此问题的人。