微信小程序获取iBeacon数据的方法

蛰伏已久 蛰伏已久 2018-04-13

最近在做一个关于iBeacon的项目,用户进入展馆时打开小程序,当走进某个展品时,弹窗提醒展品详情。

微信小程序关于iBeacon只有5个接口,很简单,只需要熟悉获取数据的流程即可。


1.判断用户是否打开蓝牙:

由于iBeacon是基于蓝牙传输数据的,所以第一步要判断是否打开蓝牙,如果没有打开则提示用户去打开蓝牙,然后在下拉刷新时重新判断,确认用户打开之后再搜索iBeacon设备

wx.openBluetoothAdapter({
  success: () => {
     //搜索iBeacon设备
  },
  fail: () => {
    wx.showModal({
      title: '提醒',
      content: '请先打开您的手机蓝牙,打开后下拉刷新',
    })
  }
})


2.通过wx.startBeaconDiscovery接口,搜索iBeacon设备,如需搜索多个设备,需要将UUID组成一个数组

3.搜索设备成功后,设置 iBeacon 设备的更新事件wx.onBeaconUpdate

4.在监听事件中,获取数据wx.getBeacons

5.根据得到的距离,进行你的业务操作

wx.startBeaconDiscovery({
    uuids: ["FDA50693-A4E2-4FB1-AFCF-C6EB07647825","AB8190D5-D11E-4941-ACC4-42F30510B408"], //多个uuid数组
    
    success: function (res) {
        wx.onBeaconUpdate(function(){
        //设置监听事件
            wx.getBeacons({
            //在监听事件中获取数据
                success:res=>{
                    console.log(res.beacons;)  //res.beacons 为搜索到的iBeacon数据数组
                    //业务代码
                }
            })
        })
    }
})


实际使用中发现iBeacon数据只有在1-3米之内数据还可以用,超出这个距离数据就不一定准确了,可能真实距离你远的设备,返回的距离数据反而近,造成数据不正确,因此必须对获取的数据进行过滤,我是这么做的

  • 返回距离值accuracy为-1的,清除,此数据往往是距离较远

  • 返回距离大于3米的,清除,这些数据往往不准确

  • 连续返回8次(自己定义次数)都指示距离某个展品近,才弹窗展示展品详情,以免偶尔一次数据不准确造成错误弹窗


iBeacon在被身体或者物体遮挡后,返回的数据也不准确了,信号被挡住了,返回的距离远,实际使用时也要考虑,我们将ibeacon设备放置在房屋顶部,以避免这种情况。



分享到

点赞(6)