問題タブ [android-appstandby]
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 - NotificationListenerService と Doze モードとアプリ スタンバイ
電話の通知をリッスンし、を介して Android Wear ウォッチにメッセージを送信するアプリがありますMessageApi
。Android 6 を搭載した一部のデバイス、特に Huawei Mate 8 を除いて、すべて正常に動作します (すべての Huawei Android 6 がこれを行うようです)。
Huawei には、フリーズ アプリのバックグラウンド処理 (保護されたアプリ) の独自の実装があります。ユーザー レポートから、Huawei の保護されたアプリと Android 6 のDozeモードで、私のアプリに例外があることを確認しました。アプリは正常に動作しますが、ディスプレイをオフにしてちょうど 15 分後に、アプリが接続された Android Wear ウォッチへのメッセージの送信を停止します。私のアプリは受信した通知の履歴も記録できますが、15 分経っても何も届きません... 電話のディスプレイがオンになってアプリが開かれるまで。その後、電話のディスプレイがオフのときに到着するはずだったすべての通知がNotificationListenerService
実装に到着し、一度に時計に送信されます。これは、記録された履歴でも確認されます。
これらの電話、特に Doze モードの Android 6 を搭載した Huawei Mate 8 でこれを修正する方法はありますか?
NotificationListenerService
デバイスが居眠りモードにあるときやアプリがスタンバイ モードにあるときの の正しい動作はどれですか?
編集
ユーザーは、バックグラウンド アプリとそのサービスにも影響を与える省電力モードになっていないことも確認しています。Nexusユーザーがこれを報告しておらず、私のOnePlus One with Mもこれを行っていないため、このバグはHuawei専用のようです. また、Nexus デバイスでは N プレビューが適切に機能します。
編集2
オプションのフォアグラウンド サービス ( startForeground()
) を追加したので、アプリの通知センターに永続的な通知が表示されるため、すべてのバッテリー最適化からアプリを除外する必要があります。フォアグラウンド サービス通知では、優先度を使用し、フラグNotificationCompat.PRIORITY_MIN
を追加しました。Notification.FLAG_ONGOING_EVENT
これは Huawei の携帯電話では少し役に立ちましたが、それほどではありませんでした。今ではNotificationListenerService
、アプリを開いた後ではなく、画面がオンになった直後に遅延通知が届きます。startForeground()
ライフサイクルを制御できないため、自分では使用しませんNotificationListenerService
が、別の方法では使用Service
します。
android - アプリがアプリ スタンバイ モードに入ったかどうかを検出する方法 (Android M+)
デバイスが DOZE IDLE または IDLE_MAINTENANCE モードの場合、「 android.os.action.DEVICE_IDLE_MODE_CHANGED 」のブロードキャスト レシーバーを登録すると、これらのイベントを受信できます。ただし、 adb コマンドを使用してアプリをアプリ スタンバイにする場合、このレシーバーは機能しません。Marshmallow 以降で実行されているデバイスのアプリがアプリ スタンバイ モードに移行したか、アプリ スタンバイ モードから終了したかをプログラムで確認することは可能ですか?
アプリをアプリ スタンバイにするために使用される adb コマンド
そして終了する
android - Android 7.1.1 (Nougat) アプリのスタンバイとネットワーク
アプリがバックグラウンドにあるときにネットワーク呼び出しを発行する必要があります。シーケンスは次のとおりです。アプリは GCM 呼び出しを受け取り、さらにデータを取得するために BE に API 呼び出しを発行し、通知を表示します。GCM 呼び出しは完全に受信されますが、API ネットワーク呼び出しはタイムアウトにより次のように失敗しますstack-trace
。
私はokhttp
verを使用しています2.7.5
、retrofit
1.9.0
アプリはバックグラウンドにありますが、デバイスは居眠り状態ではなく、画面はオンで、充電もされています。だからそれはDOZEの問題ではありません。
との両方で発生WiFi
し3/4G
ます。
pre-nougat
デバイスにはこの問題はありません。
UPD バッテリー設定でアプリが「最適化されていない」として選択されている場合、すべてが魅力的に機能します。