使用以下代码,我可以获取WiFi信号水平的dBm值。
for (ScanResult result : wifiScanResultList) {
int signalLevel = result.level;
}
它给出负值。当我们查看默认系统WiFi设置并单击连接的WiFi网络时,它会以"好"或"坏"作为信号强度显示。我们可以将哪些负数过滤为"好"信号强度或"坏"信号强度的范围是多少?
使用以下代码,我可以获取WiFi信号水平的dBm值。
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)
numberOfLevels
中使用3即可。1 表示差,2 表示一般,3 表示强。 - Sambhav KhandelwalWifiManager 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");
您已经得到了信号强度值,下面是一个代码示例,可以将Wi-Fi信号分为高、中、低三个级别。
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
}
我认为其他品牌应该也差不多。