Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 不可靠读取RSSI值不可靠_Android_Bluetooth Lowenergy_Bluetooth Gatt - Fatal编程技术网

Android 不可靠读取RSSI值不可靠

Android 不可靠读取RSSI值不可靠,android,bluetooth-lowenergy,bluetooth-gatt,Android,Bluetooth Lowenergy,Bluetooth Gatt,我正在尝试正确读取连接到的BLE设备的RSSI,以便将其发送到上游服务器 我发现BluetoothGatt.readRemoteRssi()返回的RSSI有很多“跳跃”。我开始做跑步平均(在过去10秒钟内)以获得更平滑的值。这没有帮助,因为该值有很多峰值 我发现执行mBluetoothAdapter.startedscan(null)使值更平滑。我知道官方文档不鼓励在连接到设备时进行扫描,但实际上,在LG和三星设备上,它确实可以工作 进一步-如果我将null作为回调传递,则此方法不应执行任何操作

我正在尝试正确读取连接到的BLE设备的RSSI,以便将其发送到上游服务器

我发现
BluetoothGatt.readRemoteRssi()
返回的RSSI有很多“跳跃”。我开始做跑步平均(在过去10秒钟内)以获得更平滑的值。这没有帮助,因为该值有很多峰值

我发现执行
mBluetoothAdapter.startedscan(null)使值更平滑。我知道官方文档不鼓励在连接到设备时进行扫描,但实际上,在LG和三星设备上,它确实可以工作

进一步-如果我将
null
作为回调传递,则此方法不应执行任何操作(请参阅)。这让我相信三星和LG确实对Android蓝牙协议栈做了很多修改

谁能解释一下我看到了什么?有谁能为读取“真实”RSSI值提供更好的解决方案吗


编辑:

我发现
oncharasteristicwrited()
用相同的值调用了几次(?),即使硬件只发送了一次。我们现在正在手动筛选这些值。另外,
onRssiRead()
被多次调用


这可能是Android文档建议在连接到BT设备时不要扫描的原因。

readRemoteRssi方法返回蓝牙控制器测量的已连接设备的rssi值。请注意,BLE连接最多可在37个通道上运行,并在每个连接事件上跳转

扫描时得到的rssi值是每个广告包的rssi值。广告只有三个渠道

主机端的蓝牙堆栈,即主CPU上运行的Android软件不会改变蓝牙控制器测量的rssi值

所以我能看到你们不同结果的唯一原因是,不同的无线电频道有不同的噪声/质量或相似。正如你可能在网上读到的,rssi会有很大的变化,这正是我们必须面对的。有关不同广播频道的详细信息,请参阅

还要注意的是,远非所有的外围设备都在连接到某个设备时继续进行广告宣传


如果您认为传递null没有任何作用,那么您可以检查logcat并查看是否打印了预期的错误消息?但是,我无法解释扫描如何改变readRemoteRssi为已连接设备返回的值,因为这毫无意义。如果你认为这是一种黑魔法,你必须向蓝牙控制器公司咨询;)

readRemoteRssi方法返回蓝牙控制器测量的已连接设备的rssi值。请注意,BLE连接最多可在37个通道上运行,并在每个连接事件上跳转

扫描时得到的rssi值是每个广告包的rssi值。广告只有三个渠道

主机端的蓝牙堆栈,即主CPU上运行的Android软件不会改变蓝牙控制器测量的rssi值

所以我能看到你们不同结果的唯一原因是,不同的无线电频道有不同的噪声/质量或相似。正如你可能在网上读到的,rssi会有很大的变化,这正是我们必须面对的。有关不同广播频道的详细信息,请参阅

还要注意的是,远非所有的外围设备都在连接到某个设备时继续进行广告宣传

如果您认为传递null没有任何作用,那么您可以检查logcat并查看是否打印了预期的错误消息?但是,我无法解释扫描如何改变readRemoteRssi为已连接设备返回的值,因为这毫无意义。如果你认为这是一种黑魔法,你必须向蓝牙控制器公司咨询;)