我正在尝试使用闹钟管理器self.tableView.reloadData()
每30分钟在我的应用中发出警报但是它无效!
每当收到警报信号时,我都会通过发出推送通知来测试功能。
问题是:当设备闲置一段时间后进入打盹模式时,我不再收到警报。但是,只要我打开屏幕,我就会收到通知。我的应用程序需要准确的警报,需要每30分钟准确按时交付!由于设备处于打盹模式,它无法接收延迟警报或丢失警报!
我在代码中使用了以下内容:
setExactAndAllowWhileIdle
方法我设置了下一个警报。我也是,开始了
startWakefulService只发出推送通知,然后停止
本身。备注:
onReceive()
android.permission.WAKE_LOCK
,即使在打瞌睡期间也一直有效
模式,每50个警报一个丢弃/延迟警报。所以,它也不是
完善。而且我不希望用户一直看到警报图标
那里。P.S: 在回答之前,请确保您了解从Android 6.0 M和Doze模式开始施加的限制。
Link1:https://developer.android.com/training/monitoring-device-state/doze-standby.html
总结它说:
现在,为什么我不能使用setAlarmClock()
每30分钟获得准确的警报信号?!
而且,为什么setExactAndAllowWhileIdle()
100%可靠?!
答案 0 :(得分:2)
您可能会获得准确的警报,但in Doze mode
系统忽略唤醒锁定。
因此,如果真的需要每30分钟触发一次,AlarmManager.setAlarmClock
似乎是唯一可接受的解决方案。这可能会否定所有打盹模式的节能......
顺便说一句:好像你可以看到adb shell dumpsys alarm
的警报。
可能性:使用Firebase JobDispatcher
Firebase JobDispatcher是一个用于在Android应用中安排后台作业的库。它提供了与JobScheduler兼容的API,适用于安装了Google Play服务的所有最新版本的Android(API级别14+)。
答案 1 :(得分:0)
我遇到了和你一样的问题,并且长时间搜索解决方案。但我找不到一般解决方案。
可以使用三星设备的解决方案: Android AlarmManager not working on some devices when the app is closed
第一个答案不起作用,但第二个答案是:)
答案 2 :(得分:0)
您是否尝试过将应用添加到电池优化白名单?正如一些新闻指出的那样(link),华为具有一些特殊的电池管理功能。
答案 3 :(得分:0)
如果您想在每次计时器触发时显示通知,则可以使用后端服务器向 Android 用户发送数据通知。
您需要在后端服务器中保存 Android 客户端的 FCM 令牌,服务器将负责向这些客户端推送通知。
我知道只显示通知有点复杂,但这就是 Android 系统的工作原理!