我想在蓝牙低功耗设备的UI上显示蓝牙连接强度为“信号强度条”。为此,我需要使用BluetoothGattCallback.onReadRemoteRssi
中的RSSI值。但是,该方法将RSSI作为分贝而不是条形比例返回。我需要一些方法可靠地将此值转换为条形比例或百分比。
浏览Android文档以获得答案时,我偶然发现WifiManager.calculateSignalLevel(int rssi, int numLevels)
。是否可以使用此方法来解释蓝牙信号强度?如果没有,我怎么能这样做?
答案 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信号电平,而不是蓝牙。我没有使用蓝牙方法的经验。