微信小程序 一键连接 WIFI

1,033 阅读1分钟

微信小程序 在已知 WIFI 名和密码情况下,实现一键连接。

在实现这个功能时可能遇到一些问题

  • IOS 及 安卓连接情况不一致

  • 机型版本情况不同问题

  • 手机联网情况

    1、已连接 目标WIFI

    2、已连接 WIFI 不属于目标 WIFI

    3、使用数据网络 或 手机热点

IOS

startWifionWifiConnectedconnectWifigetConnectedWifistopWifi,根据情况需要用到这些方法

startWifi 用于初始化 Wi-Fi 模块,只有初始化wifi模块之后才可以进行其他操作

stopWifi 关闭 WIFI 模块,建议执行完 WIFI 模块之后将其关闭释放资源

connectWifi 根据传递参数连接 WIFI

getConnectedWifi 获取当前 WIFI 信息

stopWifi 释放 WIFI 模块

 wx.showModal({
      title: '提示',
      content: '请连接 WIFI',
      success: r => {
        if(r.confirm) {  // 确认去自动连接 WIFI
          wx.startWifi({
            success: sRes => {
              /*  ios 有时监听不到连接情况
              wx.onWifiConnected(oRes => {
                wx.showModal({
                  title: '监听提示',
                  content: JSON.stringify(oRes)
                })
              })
              */
              wx.showLoading({
                title: '连接中...',
                mask: true
              })
              wx.connectWifi({
                SSID: 'TP-LINK',
                password: '********',
                success: cRes => {
                  wx.hideLoading()
                  wx.getConnectedWifi({
                    success: e => {  // 当手机有了 WIFI 情况
                      if(e.wifi.SSID == 'TP-LINK') {  // 当前连接的 WIFI 是目标 WIFI 
                        wx.showModal({
                          title: '提示',
                          content: '连接成功',
                          showCancel: false
                        })
                      }else {  // 当前连接的 WIFI 是其它 WIFI
                        wx.showModal({
                          title: '提示',
                          content: '连接失败,请手动连接 WIFI ,WIFI 名称:TP-LINK,密码:********',
                          showCancel: false
                        })
                      }
                    }, fail: err => {  // 获取不到 WIFI 信息, 判断为连接失败
                      wx.showModal({
                        title: '提示',
                        content: '连接失败,请手动连接 WIFI ,WIFI 名称:TP-LINK,密码:********',
                        showCancel: false
                      })
                    }, complete: () => {
                      wx.stopWifi()  // 释放 WIFI 模块
                    }
                  })
                    
                }
              })
            }
          })
        }else if(r.cancel) {  // 取消连接 WIFI
          console.log('取消')
        }
      }
    })

目前只试了 IOS 情况下简单实现一键连接,感觉还有很多坑,特此记录一下...