アラームマネージャーのsetExactAndAllowWhileIdle
を使用して、アプリで30分ごとにアラームを鳴らそうとしていますが、機能しません!
アラーム信号を受信するたびにプッシュ通知を発行して、機能をテストします。
問題は、デバイスがしばらくアイドル状態になった後にDozeモードに入ると、アラームを受信しなくなることです。しかし、画面をオンにするとすぐに通知が届きます。私のアプリは、30分ごとに正確にオンタイムで配信される必要がある正確なアラームを必要としています!デバイスがDozeモードになっているため、遅延したアラームやドロップしたアラームを受け取る余裕はありません。
私は私のコードで以下を使用しました:
onReceive()
メソッドで、次のアラームを設定します。また、Push通知のみを発行するstartWakefulServiceを開始し、それ自体を停止します。注:
Android.permission.WAKE_LOCK
_setAlarmClock()
を使用してみました。50アラームごとに1つのドロップ/遅延アラームがありました。したがって、それも完璧ではありません。また、ユーザーに常にアラームアイコンを表示させたくありません。P.S:回答する前に、開始時に課される制限を確認してくださいAndroid 6.0 MおよびDozeモード。
Link1: https://developer.Android.com/training/monitoring-device-state/doze-standby.html
要約すると、これはこう言っています:
さて、setExactAndAllowWhileIdle()
を使用して30分ごとに正確なアラーム信号を受信しないのはなぜですか?!そして、setAlarmClock()
が100%信頼できないのはなぜですか?!
正確なアラームが表示される場合がありますが、 Dozeモードの場合
システムはwake lockを無視します。
したがって、本当にを30分ごとにトリガーする必要がある場合、 AlarmManager.setAlarmClock
が唯一の許容できるソリューションであるかのように見えます。これはおそらくすべての居眠りモードのエネルギー節約を打ち消すでしょう...
ところで、adb Shell dumpsys alarm
でアラームを確認できるようです。
可能性: Firebase JobDispatcher を使用します
Firebase JobDispatcherは、Androidアプリでバックグラウンドジョブをスケジュールするためのライブラリです。これは、すべての最新バージョンのAndroid(APIレベル14以上)。GooglePlay開発者サービスがインストールされています。
私はあなたと同じ問題を抱えており、解決策を長い間探し求めています。しかし、一般的な解決策は見つかりません。
Samsungデバイス向けのソリューションが利用可能です: Androidアラームマネージャーは、アプリが閉じているときに一部のデバイスで機能しません
最初の答えは機能しませんが、2番目の答えは:)
アプリをバッテリー最適化ホワイトリストに追加してみましたか?いくつかのニュースが指摘したように( link )、Huaweiには特別なバッテリー管理があります。