eri*_*rik 8 android android-wifi
我试图获得当前wifi连接的信号强度 getRssi()
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
事情是我得到像-35或-47等数字...我不明白他们的价值观..我已经看了android文档及其所有状态:
public int getRssi()
从以下版本开始:API Level 1返回当前802.11网络的接收信号强度指示符.
这不是规范化的,但应该是!
返回RSSI,范围是??? 至 ???
谁能解释如何"正常化"或理解这些结果?
ben*_*n75 11
我在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;
Run Code Online (Sandbox Code Playgroud)
android上的相关rssi范围是-100和-55.
有一个静态方法WifiManager.calculateSignalLevel(rssi,numLevel)将为您计算信号级别:
int wifiLevel = WifiManager.calculateSignalLevel(rssi,5);
Run Code Online (Sandbox Code Playgroud)
返回0到4之间的数字(即numLevel-1):您在工具栏中看到的条数.
根据IEEE 802.11文档:较小的负值表示较高的信号强度.
范围在-100到0 dBm之间,接近0是强度更高,反之亦然.