我可以使用以下代码获得以 dBm 为单位的 WiFi 信号电平。
for (ScanResult result : wifiScanResultList) {
int signalLevel = result.level;
}
它给出负值。当我们看到默认的系统 WiFi 设置并单击已连接的 WiFi 网络时,它会给出“好”或“坏”作为信号强度。我们可以将这些负值过滤为“好”信号强度或“坏”信号强度的范围是多少?
我可以使用以下代码获得以 dBm 为单位的 WiFi 信号电平。
for (ScanResult result : wifiScanResultList) {
int signalLevel = result.level;
}
它给出负值。当我们看到默认的系统 WiFi 设置并单击已连接的 WiFi 网络时,它会给出“好”或“坏”作为信号强度。我们可以将这些负值过滤为“好”信号强度或“坏”信号强度的范围是多少?
这是一个旧帖子,但这可能会对某人有所帮助......
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
int numberOfLevels = 5;
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int level = WifiManager.calculateSignalLevel(wifiInfo.getRssi(), numberOfLevels);
文档:public static int calculateSignalLevel (int rssi, int numLevels)
请检查接收到的无线信号功率的 dBm 值是如何表示的。
优秀 >-50 dBm
良好 -50 至 -60 dBm
一般 -60 至 -70 dBm
弱 < -70 dBm
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
// Level of a Scan Result
List<ScanResult> wifiList = wifiManager.getScanResults();
for (ScanResult scanResult : wifiList) {
int level = WifiManager.calculateSignalLevel(scanResult.level, 5);
System.out.println("Level is " + level + " out of 5");
}
// Level of current connection
int rssi = wifiManager.getConnectionInfo().getRssi();
int level = WifiManager.calculateSignalLevel(rssi, 5);
System.out.println("Level is " + level + " out of 5");
对,就是这样。这就是接收信号功率的 dBm 值的表示方式。以下是Wikipedia 上的一些详细信息。
-100 表示最低值(完全没有信号),0 表示非常好的信号(100%)
你已经有了等级,所以我将告诉你如何将 wifi 分类为高、中或低强度。以下是一段代码
int level = result.level;
if (level >= -50) {
//Best signal
} else if (level >= -70) {
//Good signal
} else if (level >= -80) {
//Low signal
} else if (level >= -100) {
//Very weak signal
} else {
//Too low signal
}
以下是三星 A7 使用的 wifi 信号电平:
return when (rssi) {
in -63..-1 -> 4
in -73..-64 -> 3
in -83..-74 -> 2
in -93..-84 -> 1
else -> 0
}
我认为其他品牌应该非常相似。