【发布时间】:2011-03-11 05:50:04
【问题描述】:
我可以获得低或高 wifi 连接。我的意思是我可以测量从 1 到 5 的信号电平吗?(假设只有一个网络)。我用了计算信号电平。但它要么返回 0 要么返回 1。 请帮帮我
【问题讨论】:
标签: android
我可以获得低或高 wifi 连接。我的意思是我可以测量从 1 到 5 的信号电平吗?(假设只有一个网络)。我用了计算信号电平。但它要么返回 0 要么返回 1。 请帮帮我
【问题讨论】:
标签: android
需要导入以下两个类
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
然后,您可以像这样测量 wifi 信号强度:
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
int wifiSignalStrength = WifiManager.calculateSignalLevel(info.getRssi(), 4);
//displaying the wifi signal level in a Toast
Toast.makeText(getApplicationContext(), "signal strength: "+wifiSignalStrength, Toast.LENGTH_LONG).show();
【讨论】:
实际上 API 中的代码有缺陷;如果您使用 46 个或更多级别,它将始终返回 0。阅读here 了解更多信息。 我想大多数人都希望使用 101 来表示级别,以准确计算百分比。
它已在 4.0.1 及更高版本中修复。我做了这个,所以你可以在任何平台版本上使用它。
public int getWifiSignalStrength(Context context){
int MIN_RSSI = -100;
int MAX_RSSI = -55;
int levels = 101;
WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
int rssi = info.getRssi();
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH){
return WifiManager.calculateSignalLevel(info.getRssi(), levels);
} else {
// this is the code since 4.0.1
if (rssi <= MIN_RSSI) {
return 0;
} else if (rssi >= MAX_RSSI) {
return levels - 1;
} else {
float inputRange = (MAX_RSSI - MIN_RSSI);
float outputRange = (levels - 1);
return (int)((float)(rssi - MIN_RSSI) * outputRange / inputRange);
}
}
}//end method
【讨论】: