webdevqa.jp.net

Android Alarm Manager setExactAndAllowWhileIdle()がAndroid 7.0 DougaモードのNougatで機能しない

アラームマネージャーのsetExactAndAllowWhileIdleを使用して、アプリで30分ごとにアラームを鳴らそうとしていますが、機能しません!

アラーム信号を受信するたびにプッシュ通知を発行して、機能をテストします。

問題は、デバイスがしばらくアイドル状態になった後にDozeモードに入ると、アラームを受信しなくなることです。しかし、画面をオンにするとすぐに通知が届きます。私のアプリは、30分ごとに正確にオンタイムで配信される必要がある正確なアラームを必要としています!デバイスがDozeモードになっているため、遅延したアラームやドロップしたアラームを受け取る余裕はありません。

私は私のコードで以下を使用しました:

  1. アプリを開いたときにアラームを設定しました。
  2. WakefulBroadcastReceiverを使用してアラーム信号を受信します。そのonReceive()メソッドで、次のアラームを設定します。また、Push通知のみを発行するstartWakefulServiceを開始し、それ自体を停止します。
  3. OnReceive()の最後にcompleteWakefulIntentを呼び出します。
  4. RTC_WAKEUPとELAPSED_REALTIME_WAKEUPの両方をテストしてみました

注:

  • WakefulbroadcastReceiverクラスはマニフェストに登録されています。
  • 次の権限を追加しました:_Android.permission.WAKE_LOCK_
  • アプリをホワイトリストに登録してみましたが、結果は同じです
  • Dozeモード中でも常に機能するsetAlarmClock()を使用してみました。50アラームごとに1つのドロップ/遅延アラームがありました。したがって、それも完璧ではありません。また、ユーザーに常にアラームアイコンを表示させたくありません。
  • ドーズ中にsetExactAndAllowWhileIdle()が機能しないだけでなく、機能しているときの精度も非常に高くなります。通常、アラーム信号がたくさんあります
    1〜3分後または1〜3分前。
  • 私はHuawei Mate 8とAndroid 7.0 Nougatを使用してテストしています。

P.S:回答する前に、開始時に課される制限を確認してくださいAndroid 6.0 MおよびDozeモード。

Link1: https://developer.Android.com/training/monitoring-device-state/doze-standby.html

要約すると、これはこう言っています:

  • Doze中に発生するアラームを設定する必要がある場合は、setAndAllowWhileIdle()またはsetExactAndAllowWhileIdle()を使用します。
  • SetAlarmClock()で設定されたアラームは、通常どおり発生し続けます—システムは、それらのアラームが発生する少し前にDozeを終了します。

さて、setExactAndAllowWhileIdle()を使用して30分ごとに正確なアラーム信号を受信しないのはなぜですか?!そして、setAlarmClock()が100%信頼できないのはなぜですか?!

17
Mena

正確なアラームが表示される場合がありますが、 Dozeモードの場合

システムはwake lockを無視します。

したがって、本当にを30分ごとにトリガーする必要がある場合、 AlarmManager.setAlarmClock が唯一の許容できるソリューションであるかのように見えます。これはおそらくすべての居眠りモードのエネルギー節約を打ち消すでしょう...

ところで、adb Shell dumpsys alarmでアラームを確認できるようです。


可能性: Firebase JobDispatcher を使用します

Firebase JobDispatcherは、Androidアプリでバックグラウンドジョブをスケジュールするためのライブラリです。これは、すべての最新バージョンのAndroid(APIレベル14以上)。GooglePlay開発者サービスがインストールされています。

3
serv-inc

私はあなたと同じ問題を抱えており、解決策を長い間探し求めています。しかし、一般的な解決策は見つかりません。

Samsungデバイス向けのソリューションが利用可能です: Androidアラームマネージャーは、アプリが閉じているときに一部のデバイスで機能しません

最初の答えは機能しませんが、2番目の答えは:)

0
jojo625

アプリをバッテリー最適化ホワイトリストに追加してみましたか?いくつかのニュースが指摘したように( link )、Huaweiには特別なバッテリー管理があります。

0
Twisted Lullaby