请帮我解决在 Android 中创建闹钟的问题。
我的应用程序需要在用户指定的时间通知用户一个事件。这些事件会在 5-10 分钟内发生。
我尝试做的第一件事是使用 AlarmManager 及其 setExactAndAllowWhileIdle 和设置 Alarm Clock 方法。这在设备处于活动状态时有效,但当设备处于睡眠模式时警报不会响起。与此同时,我一触碰设备,闹钟就响了。不适合我。
然后我尝试使用前台服务。但当手机进入睡眠模式时,服务也会停止。
我也尝试过使用wakelock,但服务还是暂停了。
有没有办法制作一个准确的闹钟,当手机处于睡眠模式时,设置后5-10分钟就会响?
我已经尝试解决这个问题一周了,但没有结果。请帮我解决一下。
在 setExactAndAllowWhileIdle() 被设计为在手机处于睡眠模式时触发之前,我也遇到过同样的问题,但它不会唤醒它,并且它有一些限制,所以它并不完全准确,尝试使用 setAlarmClock() 这个旨在让系统在警报触发之前退出睡眠模式代码示例:
val intent =
Intent(context, AlarmReceiver::class.java).apply {
addFlags(Intent.FLAG_FROM_BACKGROUND)
}
alarmManager.setAlarmClock(
AlarmManager.AlarmClockInfo(
LocalDateTime
.now()
.atZone(ZoneId.systemDefault())
.toEpochSecond() * 1000 + alarmItem.alarmIn * 1000,
null,
),
PendingIntent.getBroadcast(
context,
alarmItem.id.hashCode(),
intent,
PendingIntent.FLAG_UPDATE_CURRENT or
PendingIntent.FLAG_IMMUTABLE,
),
this article explain this topic well :
https://medium.com/@igordias/android-scheduling-alarms-with-precise-delivery-time-using-alarmmanager-75c409f3bde0
-使用警报管理器时需要考虑的另一件事是,当设备重新启动时,系统将取消所有警报,以解决您需要使用 sqldelight 保存这些警报的问题,并添加广播接收器以在设备重新启动时再次安排它们
-还需要像您一样使用前台服务,并且不要忘记使用广播接收器来接收这些警报