android WifiManager中Rssi是啥意思

Posted

技术标签:

【中文标题】android WifiManager中Rssi是啥意思【英文标题】:What's the meaning of Rssi in android WifiManagerandroid WifiManager中Rssi是什么意思 【发布时间】:2012-11-07 17:50:07 【问题描述】:

我正在尝试使用getRssi() 获取当前 wifi 连接的信号强度

private void checkWifi()
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo Info = cm.getActiveNetworkInfo();
    if (Info == null || !Info.isConnectedOrConnecting()) 
        Log.i("WIFI CONNECTION", "No connection");
     else 
        int netType = Info.getType();
        int netSubtype = Info.getSubtype();

        if (netType == ConnectivityManager.TYPE_WIFI) 
            wifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
            int linkSpeed = wifiManager.getConnectionInfo().getLinkSpeed();
            int rssi = wifiManager.getConnectionInfo().getRssi();
            Log.i("WIFI CONNECTION", "Wifi connection speed: "+linkSpeed + " rssi: "+rssi);


        //Need to get wifi strength
         
    

问题是我得到了 -35 或 -47 等数字。我不明白它们的值。我查看了 android 文档及其所有说明:

public int getRssi()

Since: API Level 1 返回接收到的信号强度指标 当前的 802.11 网络。

这不是标准化的,但应该是!

返回 RSSI,范围为 ???到???

有人可以解释如何“规范化”或理解这些结果吗?

【问题讨论】:

【参考方案1】:

我在WifiManager.java 找到了这个:

/** Anything worse than or equal to this will show 0 bars. */
private static final int MIN_RSSI = -100;

/** Anything better than or equal to this will show the max bars. */
private static final int MAX_RSSI = -55;

android 上的相关 rssi 范围在 -100 和 -55 之间

有这个静态方法WifiManager.calculateSignalLevel(rssi,numLevel) 可以为你计算信号电平:

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

返回一个介于 0 和 4 之间的数字(即 numLevel-1):您在工具栏中看到的条数。

编辑 API 30+

静态方法现已弃用,您应该使用instance method

wifiManager.calculateSignalLevel(rssi)

主要区别在于级别数现在由wifiManager.getMaxSignalLevel()给出

【讨论】:

已弃用。它替换为 public int calculateSignalLevel (int rssi) developer.android.com/reference/android/net/wifi/…【参考方案2】:

根据 IEEE 802.11 文档:较小的负值表示较高的信号强度。

范围在 -100 到 0 dBm 之间,越接近 0 表示强度越高,反之亦然。

【讨论】:

但是范围是多少?有人吗?> 等等.. -100 比 0 强吗? 不。 -100 比 0 弱,甚至可以说是 -99。 文档不是这么说的。。大家都说“越低”的数字越强.. @erik 'lower' 表示“小于”,-100 【参考方案3】:

来自***:

供应商提供他们自己的准确性、粒度和范围 实际功率(测量为 mW 或 dBm)及其 RSSI 值范围 (从 0 到 RSSI_Max)。

例如,思科系统卡的 RSSI_Max 值为 100,并且 将报告 101 个不同的功率级别,其中 RSSI 值为 0 到 100. 另一种流行的 Wi-Fi 芯片组是由 Atheros 制造的。基于 Atheros 的卡将返回 0 到 127 (0x7f) 和 128 的 RSSI 值 (0x80) 表示无效值。

所以这很大程度上取决于设备。

【讨论】:

【参考方案4】:

从ben75的回答开始,我们可以用这个方法来规范化rssi:

public static int normalizeRssi(int rssi)
  // Anything worse than or equal to this will show 0 bars
  final int MIN_RSSI = -100;
  // Anything better than or equal to this will show the max bars.
  final int MAX_RSSI = -55;

  int range = MAX_RSSI - MIN_RSSI;
  return 100 - ((MAX_RSSI - rssi) * 100 / range);

【讨论】:

以上是关于android WifiManager中Rssi是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

android里有获取周围所有wifi ap 的信号强度的方法么?

Android WiFiManager enableNetwork 返回 false

WifiManager.getScanResults() 未在 Android Jelly Bean 上提供 SSID

Android wifimanager.startscan() 在主线程还是在后台?

如何在Android中测量NFC RSSI?

如何在android中测量NFC RSSI?