android - wifi断开后我的重复警报不起作用
问题描述
我的设备没有 sim 卡或任何网络,除了 wifi 连接。
现在我正在为每天设置重复警报,当连接 wifi 时它工作正常,但是当 Android 平板电脑上没有连接 wifi 时它不会按时触发。
val pendingIntent = PendingIntent.getBroadcast(context, requestCode, archiveIntent, PendingIntent.FLAG_CANCEL_CURRENT)
val alarms = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
alarms.cancel(pendingIntent)
alarms.setInexactRepeating(AlarmManager.RTC_WAKEUP, updateTime.timeInMillis, AlarmManager.INTERVAL_DAY, pendingIntent)
以下是我的观察:
假设我在晚上 7:10 设置了一个闹钟,当设备时间更改为晚上 7:10 时,它会在始终连接 wifi 的情况下按预期接听电话。
现在同样的场景,闹钟设置为晚上 7:10,但是当设备时间更改为晚上 7:10 但当时 wifi 没有连接,现在 7:11 之后我在设备上打开我的 wifi,就在我连接之后wifi 在这种情况下,我之前设置的警报被调用了。
谁能知道当wifi没有连接时警报没有及时触发的原因是什么?
注意:在我的警报广播中,我正在启动 WorkManager,它有一个限制,即只有在连接了 wifi 网络时才应该启动,但我相信 WorkManager 不应该影响我的警报触发。
解决方案
看看这个答案
它与 wifi 无关,它是您设置它的方式,尝试使用setRepeating
而不是setInexactRepeating
. 上面的答案很好地解释了差异。
编辑
最终在将标志更改为 0 后使其正常工作,如下所示
val pendingIntent = PendingIntent.getBroadcast(context, requestCode, archiveIntent, 0)
传递 0 将带回任何现有警报或创建一个新警报。
推荐阅读
- cypress - 赛普拉斯在 AWS 记录到旧运行时并行运行
- android - 如何使用流和协程在循环内收集数据
- docker - 如何将正确的上下文传递给 docker-compose build?
- javascript - 函数启动时 JavaScript 中的秒表
- axios - 笑话:延迟 axios 拦截器处理程序
- c# - 如何将两个参数传递给 ASP.NET Core MVC 中的控制器?
- vba - shellcont/shell 图像
- masonry - TypeError: $(...).masonry 在 JS 中使用 init 时不是函数
- typescript - Typescript 4.1.5 传播运算符问题
- python - 如何计算不同行对的平均值并从数据框中删除 N-1 行?