【发布时间】:2017-12-18 03:47:18
【问题描述】:
我尝试使用警报管理器的setExactAndAllowWhileIdle 每 30 分钟在我的应用中触发一次警报,但它不起作用!
我通过在收到警报信号时发出推送通知来测试功能。
问题是:当设备闲置一段时间后进入打盹模式时,我不再收到警报。但是,只要我打开屏幕,我就会收到通知。我的应用需要准确的警报,需要每 30 分钟准确准时发送!它不能因为设备处于打盹模式而接收延迟警报或丢失警报!
我在代码中使用了以下内容:
- 我在打开应用程序时设置了闹钟。
- 我使用 WakefulBroadcastReceiver 接收警报信号。在其
onReceive()方法我设置了下一个闹钟。我也,开始一个 startWakefulService 仅发出推送通知,然后停止 本身。 - 我在 onReceive() 结束时调用了 completeWakefulIntent。
- 我尝试同时测试:RTC_WAKEUP 和 ELAPSED_REALTIME_WAKEUP
注意事项:
- wakefulbroadcastReceiver 类已在 Manifest 中注册。
- 我添加了以下权限:
android.permission.WAKE_LOCK - 我尝试将我的应用列入白名单,但结果相同
- 我尝试使用
setAlarmClock(),即使在打瞌睡时也一直有效 模式,每 50 个警报有一个丢弃/延迟警报。所以,也不是 完美的。而且我不希望用户一直看到警报图标 在那里。 - setExactAndAllowWhileIdle() 不仅在打瞌睡时不起作用,而且它
工作时的准确性很差。我通常会收到很多警报信号
1-3 分钟后或 1-3 分钟前。 - 我正在使用华为 Mate 8 和 android 7.0 Nougat 进行测试。
附注: 在回答之前,请确保您了解从 Android 6.0 M 和打盹模式开始施加的限制。
链接1:https://developer.android.com/training/monitoring-device-state/doze-standby.html
总而言之,它是这样说的:
- 如果您需要设置在打瞌睡时触发的警报,请使用 setAndAllowWhileIdle() 或 setExactAndAllowWhileIdle()。
- 使用 setAlarmClock() 设置的警报继续正常触发 — 系统在警报触发前不久退出打盹。
现在,我为什么不使用setExactAndAllowWhileIdle() 每 30 分钟获得一次准确的警报信号?!
还有,为什么setAlarmClock() 不是 100% 可靠的?!
【问题讨论】:
-
可能help
-
我遇到了同样的问题,并且看到了类似的观察结果。我希望 Google 的某个人能够站出来解决这个问题。
-
@Mena 你找到解决方案了吗,我也有同样的问题。
-
@caucukien 仍然没有解决方案....
-
@Mena 你找到解决办法了吗?
标签: android android-intent android-alarms android-7.0-nougat android-doze