Android系统信息获取 之八:WIFI设备和WIFI信号信息获取
通过分析WifiManager.java,WifiINfo.java源码,我们可以发现WIFI设备信息和WIFI状态的定义。
// WifiInfo中比较常用的信息有: info.getBSSID(); //获取BSSID地址。 info.getSSID(); // 获取SSID地址。 需要连接网络的ID info.getIpAddress(); //获取IP地址。4字节Int, XXX.XXX.XXX.XXX 每个XXX为一个字节 info.getMacAddress(); //获取MAC地址。 info.getNetworkId(); //获取网络ID。 info.getLinkSpeed(); // 获取连接速度,可以让用户获知这一信息。 info.getRssi(); //获取RSSI,RSSI就是接受信号强度指示
WifiManager.WIFI_STATE_DISABLING //正在停止 WifiManager.WIFI_STATE_DISABLED //已停止 WifiManager.WIFI_STATE_ENABLING //正在打开 WifiManager.WIFI_STATE_ENABLED //已开启 WifiManager.WIFI_STATE_UNKNOWN //未知
/** * 获取WifiInfo * @param mContext * @return */ public static WifiInfo getWifiInfo(Context mContext){ WifiManager mWifiManager = (WifiManager)mContext.getSystemService(Context.WIFI_SERVICE); WifiInfo info = mWifiManager.getConnectionInfo(); return info; }
/**
* 获取本机WIFI设备详细信息
* @param mContext
* @return
*/
public static String getDetailsWifiInfo(Context mContext){
StringBuffer sInfo = new StringBuffer();
WifiInfo mWifiInfo = getWifiInfo(mContext);
int Ip = mWifiInfo.getIpAddress();
String strIp = "" + (Ip & 0xFF) + "." + ((Ip >> 8) & 0xFF) + "." + ((Ip >> 16) & 0xFF) + "." + ((Ip >> 24) & 0xFF);
sInfo.append("\n--BSSID : "+mWifiInfo.getBSSID());
sInfo.append("\n--SSID : "+mWifiInfo.getSSID());
sInfo.append("\n--nIpAddress : "+ strIp);
sInfo.append("\n--MacAddress : "+mWifiInfo.getMacAddress());
sInfo.append("\n--NetworkId : "+mWifiInfo.getNetworkId());
sInfo.append("\n--LinkSpeed : "+mWifiInfo.getLinkSpeed()+"Mbps");
sInfo.append("\n--Rssi : "+mWifiInfo.getRssi());
sInfo.append("\n--SupplicantState : "+mWifiInfo.getSupplicantState());
sInfo.append("\n\n\n\n");
return sInfo.toString();
}
/** * 搜索到的周边WIFI信号信息 * @param mContext * @return */ public static String getAroundWifiDeciceInfo(Context mContext){ StringBuffer sInfo = new StringBuffer(); WifiManager mWifiManager = (WifiManager)mContext.getSystemService(Context.WIFI_SERVICE); //WifiInfo mWifiInfo = mWifiManager.getConnectionInfo(); List<ScanResult> scanResults=mWifiManager.getScanResults();//搜索到的设备列表 for (ScanResult scanResult : scanResults) { sInfo.append("\n设备名:"+scanResult.SSID +" 信号强度:"+scanResult.level+"/n :"+mWifiManager.calculateSignalLevel(scanResult.level,4)); } return sInfo.toString(); }
其中用到了计算WIFI信号强度的方法,这个算法可以直接使用Android源码WifiManager.java中提供的方法calculateSignalLevel();
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) { /* in general, numLevels is 4 */ 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); } }