【问题标题】:Equivalent to WifiManager.calculateSignalLevel for Bluetooth RSSI等效于蓝牙 RSSI 的 WifiManager.calculateSignalLevel
【发布时间】:2014-10-09 13:51:44
【问题描述】:

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

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

【问题讨论】:

  • 您在此期间找到解决方案了吗?
  • 我还是没有,很遗憾...

标签: android bluetooth android-bluetooth rssi


【解决方案1】:

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 信号级别,而不是蓝牙。我没有使用蓝牙方法的经验。

【讨论】:

  • 您是否测试过产生的比例是否合理?
  • 我编辑了答案以包含更多信息。请注意,我的经验是使用 WiFi,但我发现它给出的结果与当前连接网络的手机相同,即使这不是 WifiManager 的公共版本会产生的结果。恕我直言,结果似乎是合理的。
猜你喜欢
  • 2011-02-21
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 1970-01-01
相关资源
最近更新 更多