- 查找附近 Wifi(不推荐,部分国产系统对此功能做了限制,建议参考《连接》章节的“对于已知类型的 Wifi 的连接方式”)
wifiUtil.scan(new OnWifiScanListener() {
@Override
public void onScan(List result) {
//自行处理 result
}
});
- 停止查找
wifiUtil.stopScan();
连接
对于未知类型的 Wifi,需要先进行查找附近的 Wifi,然后执行:
wifiUtil.link(ssid, password, new OnWifiConnectStatusChangeListener() {
@Override
public void onStatusChange(boolean isSuccess, int statusCode) {
//根据 statusCode 判断连接状态
switch (statusCode){
case ERROR_DEVICE_NOT_HAVE_WIFI:
txtLog.setText(“错误:设备无 Wifi”);
break;
case ERROR_CONNECT:
txtLog.setText(“错误:连接失败”);
break;
case ERROR_CONNECT_SYS_EXISTS_SAME_CONFIG:
txtLog.setText(“错误:设备已存在相同 Wifi 配置”);
break;
case ERROR_PASSWORD:
txtLog.setText(“错误:密码错误”);
break;
case CONNECT_FINISH:
txtLog.setText(“已连接”);
break;
case DISCONNECTED:
txtLog.setText(“已断开连接”);
break;
}
}
@Override
public void onConnect(WifiInfo wifiInfo) {
//连接完成后获取 Wifi 信息
}
});
对于已知类型的 Wifi,使用以下连接方式:
wifiUtil.link(ssid, password, WifiAutoConnectManager.WifiCipherType.WIFICIPHER_WPA,
new OnWifiConnectStatusChangeListener() {
@Override
public void onStatusChange(boolean isSuccess, int statusCode) {
switch (statusCode){
case ERROR_DEVICE_NOT_HAVE_WIFI:
txtLog.setText(“错误:设备无 Wifi”);
break;
case ERROR_CONNECT:
txtLog.setText(“错误:连接失败”);
break;
case ERROR_CONNECT_SYS_EXISTS_SAME_CONFIG:
txtLog.setText(“错误:设备已存在相同 Wifi 配置”);
break;
case ERROR_PASSWORD:
txtLog.setText(“错误:密码错误”);
break;
case CONNECT_FINISH:
txtLog.setText(“已连接”);
break;
case DISCONNECTED:
txtLog.setText(“已断开连接”);
break;
}
}
@Override
public void onConnect(WifiInfo wifiInfo) {
//连接完成后获取 Wifi 信息
}
}
);
返回值中,isSuccess 代表是否成功连接,statusCode 表示了所处的状态,状态值对应含义如下:
ERROR_DEVICE_NOT_HAVE_WIFI = -1; //设备无 Wifi 模块
ERROR_CONNECT = -2; //连接失败
ERROR_CONNECT_SYS_EXISTS_SAME_CONFIG = -3; //连接失败:系统已存在相同 Wifi 配置(需手动删除已存储连接)
ERROR_PASSWORD = -11; //密码错误
CONNECT_START = 1; //开始连接
CONNECT_FINISH = 2; //已连接
DISCONNECTED = 3; //已断开连接
额外方法:
//断开连接
wifiUtil.disconnect();
需要注意
请在 Activity 退出时执行 close() 方法:
@Override
protected void onDestroy() {
wifiUtil.close();
super.onDestroy();
}
⚠ 警告!请勿以 statusCode 状态为主进行判断,因为这个吃的是系统广播回调,不准,要知道连不连成功的判断方法是检查 onConnect 有没有执行。
另外我们注意到某些设备在附近没有要连接的 Wifi 的情况下,会主动重新连接之前连接的 Wifi,此
时也会走 CONNECT_FINISH 回调,同时 onConnect 也会执行,这种问题的解决方法是判断:
@Override
⚠ 警告!请勿以 statusCode 状态为主进行判断,因为这个吃的是系统广播回调,不准,要知道连不连成功的判断方法是检查 onConnect 有没有执行。
另外我们注意到某些设备在附近没有要连接的 Wifi 的情况下,会主动重新连接之前连接的 Wifi,此[外链图片转存中…(img-pBasFeQG-1643195433460)]
时也会走 CONNECT_FINISH 回调,同时 onConnect 也会执行,这种问题的解决方法是判断:
@Override