微信小程序获取iBeacon数据的方法
最近在做一个关于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)