微信小程序连接WiFi - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 小程序相关 >

微信小程序连接WiFi

发表时间:2020-9-27

发布人:葵宇科技

浏览次数:49

微信小程序连接WiFi

  • 需求说明
  • 代码及说明
    • 1. 系统判断
    • 2. 权限判断及申请
    • 3. 搜索wifi列表并连接
    • 4. 切换不同wifi时进行提示

需求说明

  1. 小程序搜索附近能连接的wifi并出现列表
  2. 点击wifi进行连接
  3. 切换不同wifi时进行提示

代码及说明

对于需求只贴上js部分代码,用于记录小程序连接wifi接口使用及遇到的问题。具体API查看微信官方文档。微信官方文档

1. 系统判断

说明: 因为获取wifi列表根据官方文档所示ios将跳转到系统设置界面,因为界面操作不统一,所以这次先不对ios设备进行适配,所以就要对设备系统进行判断并给出提示

代码:

	wx.getSystemInfo({
       success: (res) => {
         let system = res.system.split(' ')[0]
         console.log('system', system)
         if(system === 'iOS'){
          wx.showToast({
            title: '不支持IOS设备',
            icon: 'none',
            duration: 1000
          })
          setTimeout(function () {
            wx.switchTab({
              url: '..', // 需要返回的页面路径
            })
          }, 1000)
         } else {
           this.authorize() // 开始权限判断及申请
         }
       }
     })

2. 权限判断及申请

说明: 获取wifil列表等api使用前需要用户同意使用地理位置,即授权操作。首先要先获取用户目前的权限,如果没有授权需要发起授权请求。并且考虑当用户不小心点击了不同意的时候,需要在没有授权的时候有按钮,点击时提示用户打开使用地理位置的权限。

代码:

// 获取用户授权设置
authorize() {
    let that = this
    wx.getSetting({
      success(res) {
        console.log('setting', res)
        if (!res.authSetting['scope.userLocation']) {
		  // 申请获取地理位置权限
          wx.authorize({
            scope: 'scope.userLocation',
            success: (res) => {
              console.log('authorize succ', res)
              
            },
            fail: (e) => {
              console.log('authorize fail', e)
            }
          })
        }else{
          // 开始wifi模块使用
        }
      }
    })
  },

说明: wx.authorize 如果用户之前已经同意授权,则不会出现弹窗,直接返回成功。在用户的关闭了地理位置的权限时也不会有弹窗,所以需要在没有该授权的时候引导用户打开地理位置权限。

代码:

<view wx:if="{{!have_authorize}}" class="tips search_tips">当前没有权限获取您的位置用于连接wif,<text class="text_btn" bindtap="openSetting">请点击打开地理位置权限</text></view>
  // 提示用户打开设置页,打开
  openSetting() {
    wx.openSetting({
      success: (res => {
      	// res也会返回用户设置的权限,可以把权限判断部分的代码单独抽出来
        this.authorize() // 获取用户授权设置
      })
    })
  },

3. 搜索wifi列表并连接

说明: wx.startWifi 初始化 Wi-Fi 模块,wx.getWifiList 获取 Wi-Fi 列表。查看官方文档进行失误提示,这里没有详细写明。

代码:

// 获取wifi列表
  startWifi() {
    wx.showLoading({
      title: '正在搜索可连接wifi',
    })

    wx.startWifi({
      success: (res) => {
        console.log('startWifi', res)
    
        wx.getWifiList({
          success: (res) => {
            console.log('getWifiList', res)
            wx.onGetWifiList(res => {
              console.log(res)
              if(res.wifiList.length !== 0) {
                // 可以对获取的wifi列表进行数据处理或者筛选
                // 根据项目要求展示wifi列表界面
              }else{
                wx.showToast({
                  title: '暂无可连接wifi,请重试',
                  icon: 'none'
                })
              }
            })
          },  
          fail: (e) => {
            console.log('获取wifi列表失败', e)
            wx.hideLoading({})
          }
        })
      },
      fail: (e) => {
        console.log('wifi连接失败', e)
        wx.hideLoading({})
      },
    })
  },
  
  // 选择wifi连接
  onChangeWifi(e) {
    let that = this
    let item = e.detail.data
    wx.connectWifi({
      SSID: item.SSID,
      BSSID: item.BSSID,
      password: '',
      success: function (res) {
        console.log('connectWifi suc', res)
      },
      fail: function (e) {
        console.log('connectWifi fail',e)
        wx.showToast({
          title: '设备wifi连接失败',
          icon: 'none'
        })
      }
    })
  },

4. 切换不同wifi时进行提示

代码:

  wx.onNetworkStatusChange(function (res) {
      console.log('NetworkStatusChange', res)

      if(res.networkType === 'wifi') {

        wx.getConnectedWifi({
          success: (result) => {
            console.log('getConnectedWifi', result)
            // 对不同连接进行提示
          },
          fail: (e) => {
            console.log('getConnectedWifi fail', e)
          }
        })

      }
    })

相关案例查看更多