問題タブ [android-doze]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Doze モードは Google の Geofence サンプル アプリケーションをスリープ状態にします
Geofence を使用する Android アプリケーションがあり、Doze モードを克服するのに苦労しています。私のマニフェストには WAKE_LOCK パーミッションがあり、各リージョンに対して 7 つの setNotificationResponsiveness が 0 になっています。私も PendingIntent を BroadcastReceiver に変更しましたが、アプリは文字通りスリープ状態になるか、削除されたスマートフォンの画面でしばらくすると死んでしまいます。私はすでに LocationRequest を使用してみました
それでも、私は成功しませんでした。Doze でアプリケーションを実行し続けることができた人はいますか?
android - Android Alarm Manager setExactAndAllowWhileIdle() が Android 7.0 Nougat の Doze モードで動作しない
アラーム マネージャーを使用して、アプリで 30 分ごとにアラームを発生させようとしてsetExactAndAllowWhileIdle
いますが、機能していません。
アラーム信号を受信するたびにプッシュ通知を発行して、機能をテストします。
問題は、デバイスがしばらくアイドル状態になった後に居眠りモードに入ると、アラームを受信しなくなることです。ただし、画面をオンにするとすぐに通知が届きます。私のアプリには正確なアラームが必要で、30 分ごとに正確に時間通りに配信される必要があります。デバイスが Doze モードになっているため、アラームの遅延や欠落を受信する余裕はありません。
コードで次を使用しました。
- アプリを開いたときにアラームを設定します。
- WakefulBroadcastReceiver を使用してアラーム信号を受信します。その
onReceive()
方法で、次のアラームを設定しました。また、プッシュ通知のみを発行する startWakefulService を開始し、その後停止します。 - onReceive() の最後で completeWakefulIntent を呼び出します。
- 両方をテストしてみました: RTC_WAKEUP & ELAPSED_REALTIME_WAKEUP
ノート:
- マニフェストには wakefulbroadcastReceiver クラスが登録されています。
- 次の権限を追加しました:
android.permission.WAKE_LOCK
- アプリをホワイトリストに登録しようとしましたが、結果は同じです
setAlarmClock()
50 アラームごとに 1 つのドロップ/遅延アラームで、居眠りモード中でも常に機能するものを使用してみました。したがって、それも完璧ではありません。また、ユーザーに常にアラーム アイコンを表示させたくありません。- setExactAndAllowWhileIdle() は居眠り中に機能しないだけでなく、機能しているときの精度もひどいものです。私は通常、
1 ~ 3 分後または 1 ~ 3 分前に多くのアラーム信号を受け取ります。 - Huawei Mate 8 と android 7.0 Nougat を使用してテストしています。
追伸: 回答する前に、Android 6.0 M および Doze モードの開始時に課せられた制限を認識していることを確認してください。
リンク 1: https://developer.android.com/training/monitoring-device-state/doze-standby.html
要約すると、次のように述べています。
- Doze 中に起動するアラームを設定する必要がある場合は、setAndAllowWhileIdle() または setExactAndAllowWhileIdle() を使用します。
- setAlarmClock() で設定されたアラームは、通常どおり起動し続けます。システムは、これらのアラームが起動する直前に Doze を終了します。
では、なぜ 30 分ごとに正確なアラーム信号を受信しないのsetExactAndAllowWhileIdle()
でしょうか?! そして、なぜsetAlarmClock()
100% 信頼できないのでしょうか?!