一 相关概念介绍
1 涉及到的类
- WifiManager ——与Wifi相关的所有操作均通过此类
- WifiConfiguration——Wifi网络配置信息
- WifiInfo——表示当前的wifi热点信息
- ScanResult——扫描到的热点信息类
AccessPoint:这里先自行定义一个对象,方便描述和讲解,结构如下:
public class AccessPoint {
private String ssid;
private String bssid;
private String password;
private float signalStrength; // 0~100
private String encryptionType;
private int networkId;
/**
* aps are relative AccessPoints who share the same ssid while different bssid
* we will treat them as one hotspot
*/
private ArrayList<AccessPoint> relativeAPs;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
2 涉及到的广播通知
- WifiManager.WIFI_STATE_CHANGED_ACTION ——wifi开关变化广播
- WifiManager.SCAN_RESULTS_AVAILABLE_ACTION——热点扫描结果通知广播
- WifiManager.SUPPLICANT_STATE_CHANGED_ACTION——热点连接结果通知广播
- WifiManager.NETWORK_STATE_CHANGED_ACTION——网络状态变化广播(与上一广播协同完成连接过程通知)
3 相关属性及概念
- networkId——连接某个wifi热点时,系统会为该热点生成一个networkId
- ssid——wifi热点名称,可重复
- bssid——类似于mac地址,与ssid一起可作为热点的唯一标识,同时该属性每个热点唯一不重复
4 热点加密类型
常见及需要处理的热点,包括以下3大类:
- open——开放型网络,即无加密,可直接连接
- wep——采用wep加密类型的热点,已过时,不安全,容易被破解,目前使用率已不足10%
- wpa/wpa2——目前使用最广泛,相对最安全,破解难度最大的加密类型
二 开发细节
1 获取WifiManager入口类实例:
wifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
- 1
- 2
2 打开及关闭wifi
wifiManager.setWifiEnabled(true)
- 1
true表示打开wifi开关,false表示关闭,该方法的返回值仅代表操作是否成功,不代表wifi状态的变化;
通过监听广播WifiManager.WIFI_STATE_CHANGED_ACTION &