WIFI全称Wireless Fidelity, 又称802.11b标准。WIFI联盟成立于1999年,当时的名称叫做Wireless Ethernet Compatibility Alliance(WECA), 2002年10月正式改名Wi-Fi Alliance。
Android 提供android.net.wifi 包。wifi api为app和底层无线栈进行交流提供途径。底层无线栈为wifi提供接入点。
android.net.wifi 中常用的类有:
1. ScanResult, 主要用来描述已经检测出的接入点,包括接入点的地址、接入点的名称、身份认证、频率、信号强度等。
2. WifiConfiguration, wifi网络配置,包括安全配置等。
3. WifiInfo, Wifi无线连接的描述,包括接入点、网络连接状态、隐藏的接入点、IP地址、连接速度、MAC地址、网络ID、信号强度等。
4. WifiManager, 提供管理wifi连接的大部分API。
5. WifiManager.WifiLock, 通过WifiLock来锁定wifi网络,使其一直保持连接,直到这个锁定被释放。如果app需要下载很大的文件,就需要保持wifi锁,来确保app有足够的时间下载完成。wifi锁不能超越wifi-enabled设置,也没有飞行模式。
WifiManager的常用方法
1. addNetwork
2. calculateSignalLevel,
3. compareSignalLevel,
4. createWifiLock,
5. disableNetwork,
6. disconnect,
7. enableNetwork,
8. getConfiguredNetworks,
9. getDhcpInfo,
10. getScanResults,
11. getWifiState,
12. isWifiEnabled,
13. pingSupplicant,
14. reassociate,
15. removeNetwork,
16. saveConfiguration,
17. setWifiEnabled,
18. startScan,
19. updateNetwork.
学习如何控制app中的wifi连接。
// 获得WifiManager对象
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
public class WifiAdmin {
private WifiManager mWifiManager;
private WifiInfo mWifiInfo;
private List<ScanResult> mWifiList;
private List<WifiConfiguration> mWifiConfigurations;
private WifiLock mWifiLock;
public WifiAdmin(Context context) {
mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
mWifiInfo = mWifiManager.getConnectionInfo();
}
// 打开wifi
if(!mWifiManager.isWifiEnabled()){
mWifiManager.setWifiEnabled(true);
}
// 关闭wifi
if(mWifiManager.isWifiEnabled()){
mWifiManager.setWifiEnabled(false);
}
// 锁定wifilock
if(!mWifiLock.isHeld()) {
mWifiLock.acquire();
}
// 解锁wifiLock
if(mWifiLock.isHeld()) {
mWifiLock.unAcquire();
}
// 创建一个wifiLock
mWifiLock = mWifiManager.createWifiLock(“xxx”);
// 扫描wifi网络
mWifiManager.startScan();
mWifiList = mWifiManager.getScanResults();
// 得到wifi连接
mWifiConfiguration = mWifiManager.getConfiguredNetworks();
// 得到MAC地址
mWifiInfo.getMacAddress();
// 得到接入点的BSSID
mWifiInfo.getBSSID();
// 得到IP地址
mWifiInfo.getIpAddress();
// 得到连接的ID
mWifiInfo.getNetworkId();
// 得到WifiInfo所有信息
mWifiInfo.toString();
// 添加一个网络并连接
int wifiConfigId = mWifiManager.addNetwork(wifiConfig);
mWifiManager.enableNetwork(wifiConfigId, true);
// 断开指定网络
mWifiManager.disableNetwork(wifiConfigId);
mWifiManager.disconnect();
}
在AndroidManifest.xml文件中授权
<uses-permission android:name=”android.permission.ACCESS_WIFI_STATE”/>
<uses-permission android:name=”android.permission.ACCESS_CHECKIN_PROPERTIES”/>
<uses-permission android:name=”android.permission.WAKE_LOCK”/>
<uses-permission android:name=”android.permission.INTERNET”/>
<uses-permission android:name=”android.permission.CHANGE_WIFI_STATE”/>
<uses-permission android:name=”android.permission.MODIFY_PHONE_STATE”/>