現在、Bluetoothペリフェラルからセンサー値を読み取り、バックエンドサーバーに送信するAndroidアプリに取り組んでいます。画面がオフになっているときにこのアプリが動作するようにするには、部分的な wake lock を取得し、ユーザーがアプリをバッテリー最適化のホワイトリストに追加します。他に選択肢がない場合にのみバッテリーのホワイトリストを使用する必要があることはわかっていますが、この記事の最後にある表で説明されているように、私の使用例ではそれが唯一の解決策のようです: https://developer.android .com/training/monitoring-device-state/doze-standby . この表には、「アプリのコア機能が、周辺機器にインターネット アクセスを提供する目的で、周辺機器との永続的な接続を維持している」場合に、ホワイトリストがアプリに受け入れられるソリューションであると記載されています。
これは私のユースケースを正確に説明しています。
ただし、アプリケーションをデバッグすると、画面がオフになり、Bluetooth API がまだ通知を受信しているときにアプリが中断されていないため、ウェイクロックが有効になっていることがわかります。ただし、数分間表示した後、wifi が機能しなくなり、すべての要求が「保留中」の状態のままになります。これは、wifi の代わりにモバイル ネットワークを使用している場合にも発生します。ネットワークが再び利用可能になるまで受信データをバッファリングしようとしましたが、ユーザーがデバイスのロックを再度解除する前にアプリがメモリ不足になる可能性があるため、これを有効な解決策とは考えていません。
Android 7より前のAndroidバージョンでは、アプリはwifiロックを使用して、その特定のアプリケーションでwifiを機能させ続けることができることを読みました。Android バージョン 8 または 9 に同様の機能はありますか? または、Wi-Fiを起動しておくために見逃したデバイス設定に構成オプションがありますか?
ユース ケースは Android 開発者の記事で説明されているため、まったく同じことを行うアプリを誰かが既に実装していることを示唆しています。これを実現する方法を示すコード例はありますか?
私のモバイル アプリは、cordova を使用して実装されています。アプリを起動し続けるために、次のプラグインを試しました。
wake lock の場合: cordova-plugin-powermanagement: 1.0.5 以降。
アプリをホワイトリストに追加するようユーザーに促します: cordova-plugin-doze-optimize: 0.5.4 以上。