在最新版本的 MIUI 中,因小米私加 WIFI 开关权限导致使用过程中可能出现不停弹出“是否允许程序开关 WIFI”的提示框,而该权限属于私有权限未找到申请方法,请进入软件设置界面手动开启权限:
另外请注意,已知在部分设备上,OnWifiConnectStatusChangeListener.onConnect 中返回的已连接 WifiInfo 中 SSID 值为“unknow ssid”系系统策略,并非本库的问题。
开始使用
创建 wifiUtil 对象:
wifiUtil = new WifiUtil(this);
查找
- 查找附近 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() 方法:
最后
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
同时我经过多年的收藏目前也算收集到了一套完整的学习资料以及高清详细的Android架构进阶学习导图及笔记分享给大家,希望对想成为架构师的朋友有一定的参考和帮助。
下面是部分资料截图,诚意满满:特别适合有开发经验的Android程序员们学习。
不论遇到什么困难,都不应该成为我们放弃的理由!
如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。
长,其余的都不重要,希望读者们能谨记这一点。
同时我经过多年的收藏目前也算收集到了一套完整的学习资料以及高清详细的Android架构进阶学习导图及笔记分享给大家,希望对想成为架构师的朋友有一定的参考和帮助。
下面是部分资料截图,诚意满满:特别适合有开发经验的Android程序员们学习。
[外链图片转存中…(img-eVtpdopO-1726055520418)]
不论遇到什么困难,都不应该成为我们放弃的理由!
如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。