为不久的将来Android设置后台闹钟

问题描述 投票:0回答:1

请帮我解决在 Android 中创建闹钟的问题。

我的应用程序需要在用户指定的时间通知用户一个事件。这些事件会在 5-10 分钟内发生。

我尝试做的第一件事是使用 AlarmManager 及其 setExactAndAllowWhileIdle 和设置 Alarm Clock 方法。这在设备处于活动状态时有效,但当设备处于睡眠模式时警报不会响起。与此同时,我一触碰设备,闹钟就响了。不适合我。

然后我尝试使用前台服务。但当手机进入睡眠模式时,服务也会停止。

我也尝试过使用wakelock,但服务还是暂停了。

有没有办法制作一个准确的闹钟,当手机处于睡眠模式时,设置后5-10分钟就会响?

我已经尝试解决这个问题一周了,但没有结果。请帮我解决一下。

android kotlin alarmmanager
1个回答
0
投票

在 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 保存这些警报的问题,并添加广播接收器以在设备重新启动时再次安排它们

-还需要像您一样使用前台服务,并且不要忘记使用广播接收器来接收这些警报

© www.soinside.com 2019 - 2024. All rights reserved.