我正在尝试正确读取我连接的 BLE 设备的 RSSI,以便将其发送到上游服务器。
我发现返回的RSSIBluetoothGatt.readRemoteRssi()
有很多“跳跃”。我开始做一个运行平均值(过去 10 秒)以获得更平滑的值。这没有帮助,因为该值有很多尖峰。
我发现这样做mBluetoothAdapter.startLeScan(null);
会使值更平滑。我知道官方文档不鼓励在连接到设备时进行扫描,但实际上 - 在 LG 和三星设备上它确实有效。
进一步 - 如果我null
作为回调传递,这个方法应该什么都不做(参见https://github.com/aosp-mirror/platform_frameworks_base/blob/master/core/java/android/bluetooth/BluetoothAdapter.java#L2833)。这让我相信三星和 LG 确实对 Android 蓝牙堆栈进行了很多修改。
谁能解释我看到了什么?谁能提供更好的解决方案来读取“真实”RSSI 值?
编辑:
我发现它onCharasteristicWritten()
被调用了几次(?)具有相同的值,即使硬件只发送一次。我们现在正在手动过滤这些值。也onRssiRead()
被叫了好几次。
这可能是 Android 文档建议在连接到 BT 设备时不进行扫描的原因。