我现在迷惑的是机器上显示信息强度是1~4格图标,那这个是怎么根据wifi强度值划分的呢?
10 个解决方案
#1
那你自能看看系统的代码了
#2
有难度!
#3
难道没有一个标准的强度等级划分
#4
事实上,这个信号的强度应该根据不同硬件厂商自己的参数定下来。
也就是说如果硬件厂商要进行Android移植开发,他应该根据自己采用的wifi硬件来修改这块代码(尤其是MIN_RSSI和MAX_RSSI),否则用户看到的wifi信号强弱格数会不对的。
这个是有计算公式的,给你一个参考方向吧
以下是原生Froyo版本Android中 frameworks\base\wifi\java\android\net\wifi\WifiManager.java
中一段代码。
/**
* Calculates the level of the signal. This should be used any time a signal
* is being shown.
*
* @param rssi The power of the signal measured in RSSI.
* @param numLevels The number of levels to consider in the calculated
* level.
* @return A level of the signal, given in the range of 0 to numLevels-1
* (both inclusive).
*/
public static int calculateSignalLevel(int rssi, int numLevels) {
if (rssi <= MIN_RSSI) {
return 0;
} else if (rssi >= MAX_RSSI) {
return numLevels - 1;
} else {
int partitionSize = (MAX_RSSI - MIN_RSSI) / (numLevels - 1);
return (rssi - MIN_RSSI) / partitionSize;
}
}
也就是说如果硬件厂商要进行Android移植开发,他应该根据自己采用的wifi硬件来修改这块代码(尤其是MIN_RSSI和MAX_RSSI),否则用户看到的wifi信号强弱格数会不对的。
这个是有计算公式的,给你一个参考方向吧
以下是原生Froyo版本Android中 frameworks\base\wifi\java\android\net\wifi\WifiManager.java
中一段代码。
/**
* Calculates the level of the signal. This should be used any time a signal
* is being shown.
*
* @param rssi The power of the signal measured in RSSI.
* @param numLevels The number of levels to consider in the calculated
* level.
* @return A level of the signal, given in the range of 0 to numLevels-1
* (both inclusive).
*/
public static int calculateSignalLevel(int rssi, int numLevels) {
if (rssi <= MIN_RSSI) {
return 0;
} else if (rssi >= MAX_RSSI) {
return numLevels - 1;
} else {
int partitionSize = (MAX_RSSI - MIN_RSSI) / (numLevels - 1);
return (rssi - MIN_RSSI) / partitionSize;
}
}
#5
学习了
#6
是的,在wifiManager裡
#7
#8
扫描到wifi热点后,未连接 获取信号强度使用ScanResult.level 这个返回的是一个负数 连接wifi热点成功后 ,获取信号强度用 wifiinfo.getRssi() 来判断 这个返回的也是一个负数 这两个有扫描区别没有?
#9
学习了
#10
那如何获取wifi的信号强度呢?是不是只有绑定监听器一种方式?如果绑定监听器,是不是在信号稳定的情况下是没法获取的啊?
#1
那你自能看看系统的代码了
#2
有难度!
#3
难道没有一个标准的强度等级划分
#4
事实上,这个信号的强度应该根据不同硬件厂商自己的参数定下来。
也就是说如果硬件厂商要进行Android移植开发,他应该根据自己采用的wifi硬件来修改这块代码(尤其是MIN_RSSI和MAX_RSSI),否则用户看到的wifi信号强弱格数会不对的。
这个是有计算公式的,给你一个参考方向吧
以下是原生Froyo版本Android中 frameworks\base\wifi\java\android\net\wifi\WifiManager.java
中一段代码。
/**
* Calculates the level of the signal. This should be used any time a signal
* is being shown.
*
* @param rssi The power of the signal measured in RSSI.
* @param numLevels The number of levels to consider in the calculated
* level.
* @return A level of the signal, given in the range of 0 to numLevels-1
* (both inclusive).
*/
public static int calculateSignalLevel(int rssi, int numLevels) {
if (rssi <= MIN_RSSI) {
return 0;
} else if (rssi >= MAX_RSSI) {
return numLevels - 1;
} else {
int partitionSize = (MAX_RSSI - MIN_RSSI) / (numLevels - 1);
return (rssi - MIN_RSSI) / partitionSize;
}
}
也就是说如果硬件厂商要进行Android移植开发,他应该根据自己采用的wifi硬件来修改这块代码(尤其是MIN_RSSI和MAX_RSSI),否则用户看到的wifi信号强弱格数会不对的。
这个是有计算公式的,给你一个参考方向吧
以下是原生Froyo版本Android中 frameworks\base\wifi\java\android\net\wifi\WifiManager.java
中一段代码。
/**
* Calculates the level of the signal. This should be used any time a signal
* is being shown.
*
* @param rssi The power of the signal measured in RSSI.
* @param numLevels The number of levels to consider in the calculated
* level.
* @return A level of the signal, given in the range of 0 to numLevels-1
* (both inclusive).
*/
public static int calculateSignalLevel(int rssi, int numLevels) {
if (rssi <= MIN_RSSI) {
return 0;
} else if (rssi >= MAX_RSSI) {
return numLevels - 1;
} else {
int partitionSize = (MAX_RSSI - MIN_RSSI) / (numLevels - 1);
return (rssi - MIN_RSSI) / partitionSize;
}
}
#5
学习了
#6
是的,在wifiManager裡
#7
#8
扫描到wifi热点后,未连接 获取信号强度使用ScanResult.level 这个返回的是一个负数 连接wifi热点成功后 ,获取信号强度用 wifiinfo.getRssi() 来判断 这个返回的也是一个负数 这两个有扫描区别没有?
#9
学习了
#10
那如何获取wifi的信号强度呢?是不是只有绑定监听器一种方式?如果绑定监听器,是不是在信号稳定的情况下是没法获取的啊?