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