问题
我正在使用Android的AlarmManager
根据用户在设置屏幕上设置的时间定期触发我的应用程序通知。我已经按照文档中的说明来实现它。代码片段如下:
fun setDailyAlarm(time: Calendar, id: Int) {
val cal = Calendar.getInstance().apply {
timeInMillis = System.currentTimeMillis()
set(Calendar.HOUR_OF_DAY, time.get(Calendar.HOUR_OF_DAY))
set(Calendar.MINUTE, time.get(Calendar.MINUTE))
}
val pi = PendingIntent.getBroadcast(context, id, intent, PendingIntent.FLAG_UPDATE_CURRENT)
alarmManager.setRepeating(
AlarmManager.RTC_WAKEUP,
cal.timeInMillis,
AlarmManager.INTERVAL_DAY,
pi
)
}
我还使用Material Dialogs library来调用时间对话框,如下所示:
MaterialDialog(this).show {
// time here is a Calendar instance
timePicker { _, time ->
setDailyAlarm(time, ALARM_ID)
}
}
屏幕如下所示: 警报本身正在触发,但发生了奇怪的错误。 假设现在是晚上9点,我将闹钟设定为早上10点。我认为预期行为是在第二天的早上10点触发闹钟,但是一旦时钟到达晚上10点,有时会出现“误报”(我所说的“有时”是这种行为甚至不一致。我设法复制了几次,我的客户也抱怨了)。请注意:应用程序的最低API级别为21。 我到目前为止尝试过的: 起初,我认为可能是日历对象获取了错误的AM / PM标志,或者Calendar.HOUR_OF_DAY属性可能是错误的,但是当我在调试器中检查这些值时,一切似乎都很好。因此,我现在对问题可能是什么毫无头绪。 这里有什么我忽略的东西吗?