相当于蓝牙RSSI的WifiManager.calculateSignalLevel

时间:2014-10-09 13:51:44

标签: android bluetooth android-bluetooth rssi

我想在蓝牙低功耗设备的UI上显示蓝牙连接强度为“信号强度条”。为此,我需要使用BluetoothGattCallback.onReadRemoteRssi中的RSSI值。但是,该方法将RSSI作为分贝而不是条形比例返回。我需要一些方法可靠地将此值转换为条形比例或百分比。

浏览Android文档以获得答案时,我偶然发现WifiManager.calculateSignalLevel(int rssi, int numLevels)。是否可以使用此方法来解释蓝牙信号强度?如果没有,我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

使用分贝的rssi(负数),使用:

int bars = WifiManager.calculateSignalLevel(rssi, 5);

使条形在通常范围0 - 4。

WiFiManager中的代码(来自GrepCode)是:

private static final int MIN_RSSI = -100;
private static final int MAX_RSSI = -55;
public static int calculateSignalLevel(int rssi, int numLevels) {
         if (rssi <= MIN_RSSI) {
            return 0;
        } else if (rssi >= MAX_RSSI) {
             return numLevels - 1;
         } else {
             float inputRange = (MAX_RSSI - MIN_RSSI);
             float outputRange = (numLevels - 1);
             return (int)((float)(rssi - MIN_RSSI) * outputRange / inputRange);
         }
     }
}

我发现在我的Galaxy S4和Note 10.1中,此代码未给出返回的级别。它更像是MAX_RSSI = -63但不完全的代码。我不知道如何找到这些三星设备中实际使用的代码。

我发现结果似乎与手机显示的信号电平相同。但是,我将它用于Wifi信号电平,而不是蓝牙。我没有使用蓝牙方法的经验。