我正在使用Android的AlarmManager
根据用户在设置屏幕上设置的时间定期在我的应用上触发通知。我已经按照the documentation实现了。就像下面的代码片段一样:
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
属性可能有误,但是当我在调试器中检查这些值时,一切似乎都很好。所以现在我对可能出现的问题一无所知。
这里有什么我想念的吗?
我正在使用Android的AlarmManager来根据用户在设置屏幕上设置的时间定期在我的应用上触发通知的问题。我已经按照文档进行了实现。它是......
我已经找到了解决这个问题的方法。
做完一些测试后,我注意到只有在将时间设置为当前时间之前的时间时,问题才会发生。然后我想到AlarmManager
可能会自动触发“旧警报”,所以这可能就是我得到假阳性的原因。