android – WifiManager.calculateSignalLevel(RSSI,5)的问题

我正在尝试使用Wifimanager来计算扫描期间找到的接入点的信号电平.

我使用以下方法:

WifiManager.calculateSignalLevel(int, int)

但无论RSSI级别如何,它似乎总是返回相同的int.

这是我的代码:

public int calculateQoS(int aRSSI){

    signalLevel = WifiManager.calculateSignalLevel(RSSI, 5);

    return signalLevel;

}
public void testCalculateQoS(){

            Log.d("signal", "signal = : "
                    + connMonitor.calculateQoS(-44)
                    + " " + connMonitor.calculateQoS(-80)
                    + " " + connMonitor.calculateQoS(-120)
                    + " " + connMonitor.calculateQoS(-20));

        }

对于calculateQoS(int)的所有测试用例,日志输出1.

我错过了一些简单的东西吗?为什么SignalLevel总是1?

解决方法:

似乎calculateSignalLevel以这种方式实现:

public static int calculateSignalLevel(int rssi, int numLevels) {
  if (rssi <= MIN_RSSI) {
      return 0;
  } else if (rssi >= MAX_RSSI) {
      return numLevels - 1;
  } else {
      int partitionSize = (MAX_RSSI - MIN_RSSI) / (numLevels - 1);
      return (rssi - MIN_RSSI) / partitionSize;
  }
}

也许这段代码可以解释你的问题.另请注意:

http://code.google.com/p/android/issues/detail?id=2555

上一篇:在Android Studio中读取已连接的蓝牙低功耗设备的RSSI值


下一篇:C#-Microsoft蓝牙堆栈RSSI解决方法