收藏
回答

蓝牙功能当手机的蓝牙是关闭再开启的时候,数据一直不停的更新?

// pages/unlock/bluetoothlock/bluetoothlock.js
Page({


  /**
   * 页面的初始数据
   */
  data: {
    showNav: true,
    bluetoothStatus: false
  },
  // 初始化蓝牙设备
  openBluetoothAdapter() {
    //监听是否打开了蓝牙设备
    let that = this
    wx.openBluetoothAdapter({
      success: (res) => {
        console.log('蓝牙设备成功', res)
        if (res.errMsg == "openBluetoothAdapter:ok") {
          // 监听蓝牙设备状态 
          that.startBluetoothDevicesDiscovery()
        }
      },
      fail: (res) => {
        console.log('蓝牙设备失败', res)
        if (res.errCode === 10001) {
          // 监听蓝牙是否开启了状态
          that.onBluetoothAdapterStateChange()  // 在这里一直重复的调用数据
        }
      }
    })
  },
  //监听蓝牙是否开启了状态
  onBluetoothAdapterStateChange() {
    let that = this
    wx.onBluetoothAdapterStateChange(function(res) {
      console.log('是否开启了蓝牙', res)
      //判断蓝牙适配器是否处于搜索状态
      // 判断设配蓝牙适配器是否可用
      if (res.available) {
        that.setData({
          bluetoothStatus: true
        })
        that.startBluetoothDevicesDiscovery()    
      }


    })
  },
  // 搜寻附近的蓝牙外围设备
  startBluetoothDevicesDiscovery() {
    let that = this
    wx.startBluetoothDevicesDiscovery({
      services: [],
      allowDuplicatesKey: false,
      success(res) {
        console.log('是否处于搜索状态', res)
        if (res.errCode == 0) {
          that.stopBluetoothDevicesDiscovery()
        }
      },
      fail(res) {
        console.log(res)
        // that.stopBluetoothDevicesDiscovery()
      }
    })
  },
  // 停止外围设备搜索,当搜索完毕要停止
  stopBluetoothDevicesDiscovery() {
    let that = this
    wx.stopBluetoothDevicesDiscovery({
      success(res) {
        console.log('停止设备', res)
        if (res.errMsg == 'stopBluetoothDevicesDiscovery:ok') {
          that.getBluetoothDevices()
        }
      }
    })
  },


  // 获取蓝牙设备列表
  getBluetoothDevices() {
    function ab2hex(buffer) {
      var hexArr = Array.prototype.map.call(
        new Uint8Array(buffer),
        function(bit) {
          return ('00' + bit.toString(16)).slice(-2)
        }
      )
      return hexArr.join('');
    }
    wx.getBluetoothDevices({
      success: function(res) {
        console.log(res)
        if (res.errMsg == 'getBluetoothDevices:ok') {


        }
        if (res.devices[0]) {
          console.log(ab2hex(res.devices[0].advertisData))
        }
      }
    })
  },
  //断开所有已建立的连接并释放系统资源建议在使用蓝牙流程后,wx.openBluetoothAdapter 成对调用
  closeBluetoothAdapter() {
    wx.closeBluetoothAdapter({
      success(res) {
        console.log(res)
      }
    })


  },


  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function(options) {
    this.openBluetoothAdapter()
  },

})
回答关注问题邀请回答
收藏

1 个回答

  • 是柿子啊
    是柿子啊
    2020-05-12

    麻烦在手机微信那里上传下日志: 我->设置->帮助与反馈右上角有个上报日志的入口,麻烦提供一下微信号,时间点

    2020-05-12
    有用
    回复 3
    • No Matter
      No Matter
      2020-05-12
      在上传,这是在真机调试上进行的
      2020-05-12
      回复
    • No Matter
      No Matter
      2020-05-12
      这个问题我解决了,是因为没有关闭监听的状态
      2020-05-12
      回复
    • No Matter
      No Matter
      2020-05-12
      还有两个问题需要咨询一下:
      1.如图,我开启蓝牙后,监听的蓝牙列表都是未知设备,而且还少
      2.如上面代码,我是在onload中去执行的蓝牙初始化代码,业务场景如下所述:
      第一种场景:我的手机蓝牙本身就是开启的,进入真机调试,然后拿到设备列表,这个目前在我调试的过程中是没有问题的。
      第二种场景:我的手机蓝牙是关闭状态,我进入调试,然后打开蓝牙,也获取到了蓝牙列表,但是我在当前调试关闭了蓝牙,然后再打开蓝牙就获取不到蓝牙列表了
      @社区技术运营专员-小柿子
      2020-05-12
      回复
登录 后发表内容
问题标签