Android开发中WiFi热点和WiFi属性的获取会经常被用到,下面就来记录下WiFi的名称、状态等属性以及获取周围WiFi热点的方法。
一、获取wifi属性
要获得Android系统相关的属性,通常需要获得相关的系统服务。在Android中最常用的是通过Manager来获得对对象的操作服务。WiFi相关的操作中需要用到两个Manager:WifiManager和ConnectivityManage:
- public
WifiManager wifiManager; //管理wifi - public
ConnectivityManager connectManager; //管理网络连接
- wifiManager
= (WifiManager) getSystemService(WIFI_SERVICE); //获得系统wifi服务 - connectManager
= (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
获得服务后,即可得到对象进而获得相关属性:
- public
NetworkInfo netInfo; //网络连接 - public
WifiInfo wifiInfo; //wifi - public
DhcpInfo dhcpInfo;"white-space:pre"> //动态主机配置协议信息的对象,获得IP等网关信息
- "code"
class="java">netInfo = connectManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); - dhcpInfo
= wifiManager.getDhcpInfo(); - wifiInfo
= wifiManager.getConnectionInfo();
- wifiInfo.getSSID();
- String
wifiProperty = "当前连接Wifi信息如下:"+wifiInfo.getSSID()+'\n'+ -
"ip:" + FormatString(dhcpInfo.ipAddress) +'\n'+ -
"mask:" + FormatString(dhcpInfo.netmask) +'\n'+ -
"netgate:"+ FormatString(dhcpInfo.gateway) +'\n'+ -
"dns:" + FormatString(dhcpInfo.dns1) ;
- public
String FormatString(int value){ -
String strValue=""; -
byte[] ary = intToByteArray(value); -
for(int i=ary.length-1;i>=0;i--){ -
strValue += (ary[i] & 0xFF); -
if(i>0){ -
strValue+="."; -
} -
} -
return strValue; -
} - public
byte[] intToByteArray(int value){ -
byte[] b = new byte[4]; -
for (int i = 0; i < 4; i++){ -
int offset = (b.length - 1 - i) * 8; -
b[i] = (byte) ((value >>> offset) & 0xFF); -
} -
return b; -
}
二、获取周围WiFi热点
wifiManager提供了一个方法getScanResults()来获得周围的wifi信息,其返回的是一组ScanResult对象,存放在list当中,每个ScanResult对象封装了一个wifi热点相关信息,通过ScanResult对象的属性即可获取到,最常用的两个属性为wifi名称(SSID)和信号强度(level):
- ArrayList
list; //存放周围wifi热点对象的列表 - list
= (ArrayList) wifiManager.getScanResults();
- //将搜索到的wifi根据信号强度从强到弱进行排序
- private
void sortByLevel(ArrayList<</span>ScanResult> list) { -
for(int i=0;i<</span>list.size();i++) -
for(int j=1;j<</span>list.size();j++) -
{ -
if(list.get(i).level<</span>list.get(j).level) //level属性即为强度 -
{ -
ScanResult temp = null; -
temp = list.get(i); -
list.set(i, list.get(j)); -
list.set(j, temp); -
} -
} -
}
如果要对wifi状态,网络连接状态进行判断等操作,不要忘了很重要的一点,就是在AndroidManifest.xml里添加权限:
- <</span>uses-permission
android:name="android.permission.CHANGE_NETWORK_STATE"></</span>uses-permission> - <</span>uses-permission
android:name="android.permission.CHANGE_WIFI_STATE"></</span>uses-permission> - <</span>uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"></</span>uses-permission> - <</span>uses-permission
android:name="android.permission.ACCESS_WIFI_STATE"></</span>uses-permission>