我試圖使用鬧鐘管理器的setExactAndAllowWhileIdle
每30分鐘在我的應用程序中發出警報,但它不工作!Android鬧鐘管理器setExactAndAllowWhileIdle()在Android 7.0中不起作用在打盹模式下的牛軋糖
我通過發送推送通知來測試功能,只要我收到報警信號。
問題是:當設備閒置一段時間後進入打盹模式時,我不再收到警報。但是,只要我打開屏幕,我會收到通知。我的應用需要準確的報警,需要每隔30分鐘準時發送一次!由於設備處於打盹模式,因此不能接收延遲報警或丟失報警!
我曾經在我的代碼如下:
- 我設置鬧鈴時,我打開我的應用程序。
- 我使用WakefulBroadcastReceiver接收警報信號。在我的
onReceive()
方法中,我設置了下一個警報。我也是,啓動一個 startWakefulService,它只發布推送通知,然後停止 本身。 - 我在onReceive()的結尾調用了completeWakefulIntent。
- 我試圖同時測試:RTC_WAKEUP & ELAPSED_REALTIME_WAKEUP
注:
- 的wakefulbroadcastReceiver類是在清單註冊。
- 我添加權限:
android.permission.WAKE_LOCK
- 我試着白名單我的應用程序,但結果都是一樣的
- 我嘗試使用
setAlarmClock()
甚至在打盹 模式工作的時候,有一個人掉隊/延遲報警每50個警報。所以,這也不是 完美。我不希望用戶在那裏看到一個報警圖標 。 - 不僅在打盹時setExactAndAllowWhileIdle()不起作用,而且它在工作時的準確度也很差。我通常會在1-3分鐘後或1-3分鐘內收到大量的報警信號
。 - 我使用華爲Mate 8和Android 7.0牛軋糖進行測試。
P.S: 回答之前請確保您瞭解的施加的限制開始的Android 6.0 M和打盹模式。
鏈接1:https://developer.android.com/training/monitoring-device-state/doze-standby.html
總之它這樣說:
- 如果您需要設置的報警,雖然在打盹火災,使用 setAndAllowWhileIdle()或setExactAndAllowWhileIdle()。
- 使用setAlarmClock()設置的警報繼續正常啓動 - 系統在這些警報觸發前即刻退出。
現在,爲什麼我不能每隔30分鐘使用setExactAndAllowWhileIdle()
獲得準確的報警信號? 而且,爲什麼不是setAlarmClock()
100%可靠?!
它可能[幫助](https://stackoverflow.com/a/39739886/3117966) – Nisarg
我有同樣的問題,並看到類似的意見。我希望Google的某個人能夠加強並解決此問題。 – d777
@Mena 您是否找到解決方案,我有同樣的問題。 – CauCuKien