在所有Android设备中,蓝牙RSSI值始终以dBm为单位?

在所有Android设备中,蓝牙RSSI值始终以dBm为单位?,android,bluetooth,rssi,Android,Bluetooth,Rssi,我是Android新手,我的应用程序使用蓝牙从一个小型称重传感器放大器接收数据。虽然在一些设备(三星手机)中,BT信号强度(RSSI)与预期不同(短距离时为-20左右,10米时为-80左右),但在其他一些设备(至少一款LG手机)中,RSSI非常奇怪,短距离时为200左右(正值!)。我假设LG手机没有给出以dBm为单位的RSSI值。在所有情况下,三星平板电脑和LG手机总是连接到同一个远程设备(我的客户正在开发的放大器样本)。实际上,我的问题是,在这种情况下,不同的Android设备(或不同的And

我是Android新手,我的应用程序使用蓝牙从一个小型称重传感器放大器接收数据。虽然在一些设备(三星手机)中,BT信号强度(RSSI)与预期不同(短距离时为-20左右,10米时为-80左右),但在其他一些设备(至少一款LG手机)中,RSSI非常奇怪,短距离时为200左右(正值!)。我假设LG手机没有给出以dBm为单位的RSSI值。在所有情况下,三星平板电脑和LG手机总是连接到同一个远程设备(我的客户正在开发的放大器样本)。实际上,我的问题是,在这种情况下,不同的Android设备(或不同的Android版本)对同一API调用的响应不同是否正常。

RSSI是一个8位带符号的2的补码整数(-128到127)。 如果以字节形式读取该值,则可以获得任何设备的正确值范围。 如果您将其读取为整数或字符串,您可能会在某些设备上得到正确的值,但在某些其他设备上得到错误的值


200作为8位有符号2的补码整数等于-56

太好了!我知道RSSI是8位有符号的,但我认为我的代码可以毫无问题地将RSSI转换为整数:lastRssi=(int)intent.getShortExtra(BluetoothDevice.EXTRA\RSSI,Short.MIN\u VALUE);我认为你的代码是正确的。。。我看到到处都是这样用的。。。但是:short是16位的,请尝试使用getByteExtra而不是getShortExtra。。。我认为这种方式应该适用于所有设备。对不起,蒂亚戈,我不习惯StackOverflow。回答接受!奥布里加多!