簡體   English   中英

Android 警報管理器 setExactAndAllowWhileIdle() 在處於打盹模式的 Android 7.0 Nougat 中不起作用

[英]Android Alarm Manager setExactAndAllowWhileIdle() not working in Android 7.0 Nougat in Doze mode

我正在嘗試使用警報管理器的setExactAndAllowWhileIdle每 30 分鍾在我的應用程序中觸發一次警報,但它不起作用!

每當我收到警報信號時,我都會通過發出推送通知來測試該功能。

問題是:當設備閑置一段時間后進入打盹模式時,我不再收到警報。 但是,一旦我打開屏幕,我就會收到一條通知。 我的應用程序需要准確的警報,需要每 30 分鍾准時發送一次! 由於設備處於打盹模式,因此無法接收延遲警報或掉線警報!

我在我的代碼中使用了以下內容:

  1. 當我打開我的應用程序時,我設置了鬧鍾。
  2. 我使用 WakefulBroadcastReceiver 接收警報信號。 在它的onReceive()方法中,我設置了下一個鬧鍾。 我還啟動了一個僅發出推送通知的 startWakefulService,然后自行停止。
  3. 我在 onReceive() 結束時調用 completeWakefulIntent。
  4. 我嘗試同時測試:RTC_WAKEUP & ELAPSED_REALTIME_WAKEUP

注意事項:

  • 在清單中注冊了wakefulbroadcastReceiver 類。
  • 我添加了以下權限: android.permission.WAKE_LOCK
  • 我嘗試將我的應用列入白名單,但結果是一樣的
  • 我嘗試使用setAlarmClock()即使在打瞌睡模式下也能一直工作,每 50 個警報就有一個下降/延遲警報。 所以,它也不完美。 而且我不希望用戶一直在那里看到警報圖標。
  • setExactAndAllowWhileIdle() 不僅在打瞌睡期間不起作用,而且在工作時它的准確性也很差。 我通常會收到很多警報信號
    1-3 分鍾后或 1-3 分鍾前。
  • 我正在使用華為 Mate 8 和 android 7.0 Nougat 進行測試。

PS:在回答之前,請確保您了解啟動 Android 6.0 M 和 Doze 模式的限制。

鏈接 1: https : //developer.android.com/training/monitoring-device-state/doze-standby.html

總之它是這樣說的:

  • 如果您需要設置在 Doze 中觸發的警報,請使用 setAndAllowWhileIdle() 或 setExactAndAllowWhileIdle()。
  • 使用 setAlarmClock() 設置的警報繼續正常觸發——系統在這些警報觸發前不久退出 Doze。

現在,為什么我不能使用setExactAndAllowWhileIdle()每 30 分鍾獲得一次准確的警報信號?! 而且,為什么setAlarmClock()不是 100% 可靠的?!

您可能會收到准確的警報,但在打盹模式下

系統忽略喚醒鎖。

因此,如果您確實需要每 30 分鍾觸發一次,似乎AlarmManager.setAlarmClock是唯一可接受的解決方案。 這可能會抵消所有打盹模式的節能...

順便說一句:似乎您可以使用adb shell dumpsys alarm看到警報。


可能性:使用Firebase JobDispatcher

Firebase JobDispatcher 是一個用於在 Android 應用中安排后台作業的庫。 它提供了一個兼容 JobScheduler 的 API,適用於安裝了 Google Play 服務的所有最新版本的 Android(API 級別 14+)。

遇到和你一樣的問題,找了好久才解決。 但我沒有找到通用的解決方案。

三星設備的解決方案是可用的: 當應用程序關閉時,Android AlarmManager 在某些設備上不起作用

第一個答案不起作用,但第二個答案:)

您是否嘗試將您的應用添加到電池優化白名單? 正如一些新聞指出的那樣( 鏈接),華為有一些特殊的電池管理。

如果您想在每次計時器觸發時顯示通知,則可以使用后端服務器向 Android 用戶發送數據通知

您需要將 Android 客戶端的 FCM 令牌保存在您的后端服務器中,服務器將負責向這些客戶端推送通知。

我知道只顯示通知有點復雜,但這就是Android系統的工作原理!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM