0

アップストリーム サーバーに送信するために、接続している BLE デバイスの RSSI を正しく読み取ろうとしています。

BluetoothGatt.readRemoteRssi()によって返される RSSI には多くの「ジャンプ」があることがわかりました。よりスムーズな値を取得するために、(過去 10 秒間の) 移動平均を開始しました。値に多くのスパイクがあったため、これは役に立ちませんでした。

mBluetoothAdapter.startLeScan(null);そうすることで値がより滑らかになることがわかりました。公式ドキュメントでは、デバイスに接続しているときにスキャンすることは推奨されていませんが、実際には、LG および Samsung デバイスでは機能します。

さらに-コールバックとして渡す場合null、このメソッドは何もしません( https://github.com/aosp-mirror/platform_frameworks_base/blob/master/core/java/android/bluetooth/BluetoothAdapter.java#L2833を参照)。このことから、Samsung と LG は Android Bluetooth スタックを大幅に変更していると思います。

誰が私が見ているのか説明できますか? 「実際の」RSSI値を読み取るためのより良いソリューションを提供できる人はいますか?


編集:

が同じ値で数回 (?) 呼び出されていることがわかりましonCharasteristicWritten()た。HW が 1 回しか送信しなかったにもかかわらずです。現在、これらの値を手動でフィルタリングしています。またonRssiRead()、数回呼び出されます。

Android のドキュメントで、BT デバイスに接続している間はスキャンしないように提案されているのは、これ理由である可能性があります。

4

1 に答える 1