700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 08_微信小程序-BLE低功耗蓝牙开发-设备搜索

08_微信小程序-BLE低功耗蓝牙开发-设备搜索

时间:2024-03-16 19:32:41

相关推荐

08_微信小程序-BLE低功耗蓝牙开发-设备搜索

遇到的一些问题 BLE相关的好多函数都是异步的,但是BLE的操作又必须按照顺序流程来,否则就会出现问题,所以这里得嵌套大量的回调函数。普通回调函数中this拿不到data数据的问题 原因:小程序在回调函数中调用this数据报错是因为在程序运行过程中,this对象也会发生改变,导致在普通回调函数之中改变后的this对象没有相关数据,即会报错 解决方法:1)使用全局变量保存这个this;2)使用箭头函数 下面开始正式开发ble设备搜索功能,为了更加方便的管理ble,对微信的小程序的ble进行的封装,并在ble.js文件中实现对应的接口功能

1.BLE初始化接口,在该接口里面,首先去打开蓝牙适配器,并且去设置蓝牙适配器状态监听回调,防止用户在使用小程序过程中又把蓝牙给关闭了。

var bleInitFlag = false; // ble是否初始化/*** @功能: ble初始化* @参数:* cb[in]: 初始化结果状态回调, true表示初始化成功* @返回:* @备注: 初始化之前请检查一下是否有蓝牙权限*/function Init(cb) {if (bleInitFlag) {// 防止重复初始化if (typeof cb == 'function') {cb(true);}return;}// 初始化蓝牙模块wx.openBluetoothAdapter({mode: 'central',success: (res) => {console.log("初始化蓝牙模块成功!");bleInitFlag = true;if (typeof cb == 'function') {cb(true);}},fail: (res) => {console.log("初始化蓝牙模块失败!");bleInitFlag = false;if (typeof cb == 'function') {cb(false);}}});// 蓝牙适配器状态监听wx.onBluetoothAdapterStateChange((res) => {console.log("蓝牙适配器状态改变"+res.available);bleInitFlag = res.available;});}

2.释放接口,当不使用蓝牙了,过程序退出了,调用该接口

/*** @功能: 页面释放的时候调用* @参数:* cb[in]: 关闭蓝牙回调失败成功回调* @返回:*/function DeInit(cb) {// if (!bleInitFlag) {//return;// }wx.closeBluetoothAdapter({success: (res) => {console.log("关闭蓝牙适配器成功");if (typeof cb == 'function') {cb(true);}},fail: (res) => {console.log("关闭蓝牙适配器失败");if (typeof cb == 'function') {cb(false);}},});// 关闭蓝牙适配器状态监听wx.offBluetoothAdapterStateChange();bleInitFlag = false;}

3.开始搜索和停止搜索的接口

/*** @功能: 开始搜索* @参数:* cb[in]: 搜索到设备的回调函数* @返回:*/function StartDiscovery(cb) {if (!bleInitFlag) {console.log("搜索失败,BLE未初始化");return}// 开始搜索附近的蓝牙外围设备wx.startBluetoothDevicesDiscovery({allowDuplicatesKey: true //允许重复上报设备,主要是为了统计信号强度})// 监听扫描到新设备事件wx.onBluetoothDeviceFound((res) => {if (typeof cb == 'function') {cb(res);}});}/*** @功能: 停止搜索* @参数:* @返回:*/function StopDiscovery() {if (!bleInitFlag) {return;}wx.stopBluetoothDevicesDiscovery();}

4.获取蓝牙适配器状态的接口

/*** @功能: 获取BLE状态* @参数:* @返回:true表示可用状态,false表示不可用*/function getBleStatus() {return bleInitFlag;}

5.在搜索按键事件中调用这些接口实现相关功能

1)检查是否有对应的BLE权限

2)初始化成功后,就去调用搜索

3)把搜索到的设备,解析对应的字段显示在对应的设备列表中

4)ble搜索是比较耗资源和电量的,所以在页面隐藏的时候,就停止搜索

这里做了大量的交互处理,比如:1)没有权限的时候,就重新去请求权限。2)如果初始化蓝牙失败,弹出提示框提示用户检查蓝牙或者权限是否打开。3)由于有时候初始化适配器需要较长的时间,所以点击按钮后,会弹出一个开始搜索的loading提示框,防止按键按了以后误以为没反应。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。