Android系统信息获取 之八:WIFI设备和WIFI信号信息获取
通过分析WifiManager.java,WifiINfo.java源码,我们可以发现WIFI设备信息和WIFI状态的定义。
1、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就是接受信号强度指示
2、WIFI的状态定义
WifiManager.WIFI_STATE_DISABLING //正在停止
WifiManager.WIFI_STATE_DISABLED //已停止
WifiManager.WIFI_STATE_ENABLING //正在打开
WifiManager.WIFI_STATE_ENABLED //已开启
WifiManager.WIFI_STATE_UNKNOWN //未知
3、获取Wifi信息的方法:
/**
* 获取WifiInfo
* @param mContext
* @return
*/
public static WifiInfo getWifiInfo(Context mContext){
WifiManager mWifiManager = (WifiManager)mContext.getSystemService(Context.WIFI_SERVICE);
WifiInfo info = mWifiManager.getConnectionInfo();
return info;
}
4、获取本机WIFI设备详细信息:
/**
* 获取本机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();
}
5、获取周边WiFi热源的信号信息
/**
* 搜索到的周边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);
}
}