gpt4 book ai didi

android - AlarmManager 设置为 PM 在 AM 时间触发

转载 作者:行者123 更新时间:2023-12-02 23:46:47 28 4
gpt4 key购买 nike

问题

我正在使用 Android 的 AlarmManager 根据用户在设置屏幕上设置的时间定期在我的应用上触发通知。我关注了the documentation来实现这一点。它的完成类似于下面的代码 fragment :

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

屏幕如下例所示:

Settings Screen

警报本身正在响起,但出现了一个奇怪的错误。

假设现在是晚上 9 点,我将闹钟设置为上午 10 点。我认为预期的行为应该是在第二天上午 10 点触发警报,但一旦时钟到达晚上 10 点,有时我会得到“误报”。 (有时我的意思是这种行为甚至不一致。我设法复制了几次,我的客户也提示了它)。

注意:该应用的最低 API 级别为 21。

到目前为止我尝试过的内容

起初,我认为日历对象可能获取了错误的 AM/PM 标志,或者 Calendar.HOUR_OF_DAY 属性可能是错误的,但是当我检查调试器似乎一切都很好。所以现在我不知道问题出在哪里。

我在这里缺少什么吗?

最佳答案

我找到了解决这个问题的方法。

经过一些测试后,我注意到只有当我将时间设置为当前时间之前的某个时间时才会出现问题。然后我想到,也许 AlarmManager 可能会自动触发“旧警报”,因此这可能就是我收到误报的原因。

然后我将 setDailyAlarm() 函数更改为下面的代码 fragment :

fun setDailyAlarm(time: Calendar, id: Int) {
val now = Calendar.getInstance()

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

if (time.get(Calendar.HOUR_OF_DAY) <= now.get(Calendar.HOUR_OF_DAY)) {
cal.add(Calendar.DATE, 1)
}

val pi = PendingIntent.getBroadcast(context, id, intent, PendingIntent.FLAG_UPDATE_CURRENT)

alarmManager.setRepeating(
AlarmManager.RTC_WAKEUP,
cal.timeInMillis,
AlarmManager.INTERVAL_DAY,
pi
)
}

TL;DR: 我正在检查所选时间是否早于当前时间,如果是这种情况,我将一天添加到 Calendar 实例中在创建 PendingIntent 之前。似乎已经解决了问题,因为警报不再在错误的时间触发。

关于android - AlarmManager 设置为 PM 在 AM 时间触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60963600/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com