源于android 源码 /frameworks/base/wifi/java/android/net/wifi/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;
.../*** 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 {float inputRange = (MAX_RSSI - MIN_RSSI);float outputRange = (numLevels - 1);return (int)((float)(rssi - MIN_RSSI) * outputRange / inputRange);}}