最近在项目上有个需求,要实现检测当前的wifi是否为我们想要连接的wifi,如果不是,则通过程序控制断掉当前的wifi,连接上我们所需要的wifi。在网上查阅了很多的资料,有很多大神也分享了实现的方法,借鉴大神们的经验将我自己的理解分享出来。

在没有看懂手机wifi设置的原理以前,以为手机上打开Wifi开关并且连接到指定的wifi,以为是系统定制的,我们是不能去模仿且改变的,查资料后才知道,手机上的wifi开关且设置网络都是调用了API去实现的,既然API的开源的,那我们也可以去调用API实现我们想要的结果。

当我们检测WiFi状态对应结果如下:

WIFI_STATE_DISABLED     0       正在关闭

WIFI_STATE_DISABLED     1        已经关闭

WIFI_STATE_ENABLING     2       正在打开

WIFI_STATE_ENABLED     3        已经打开

WIFI_STATE_UNKNOWN     4         未知

以下的这个WifiManagerUtils是我参考大神们的讲解封装的一个类。以下只是部分代码,完整的请查看分享链接链接: 链接: https://pan.baidu.com/s/1boPrbfL 密码: wagu

b37626723c2b

下面是我使用WifiManageUtils连接一个特定的wifi案列

b37626723c2b

实现的思路是:

(1)先获取当前wifi状态,如果关闭,则调用openWifiEnabled()打开wifi。

(2)当wifi状态为3(WIFI_STATE_ENABLED)时,通过getNetWorkId()返回值判断当前是否有wifi连接,如果判断是否为我们要设置的目标WIFI,如果不是则通过disconnectWifi断掉当前连接的WiFi;如果getNetWorkId()返回值返回值为null,则表示当前没有WiFi连接,则通过getScanResult()获取周围所有的wifi,并且查找是否有我们所要连接的目标Wifi。

(3)找到目标WiFi后,通过addNetWork(managerUtils.createWifiInfo(ssid,psw,3))设置目标wifi。

想要设置wifi只需要在调用的地方通过setSpecificWifi(WifiManagerUtils  wifiManagerUtils, String  ssid,String    psw)设置即可。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐