问题描述:
在开发app时,项目需要蓝牙同时订阅某个服务下的多个特征值的变化时,直接使用uni.notifyBLECharacteristicValueChange只能订阅一个特征值的变化。
具体实现:
1.将 this.onBLECharacteristicValueChange();放到onLoad()中注册,确保该方法只注册一次,如果该方法注册了多次,蓝牙发送的数据会重复上传。
- 在蓝牙的订阅函数notifyBLECharacteristicValueChange()中设置定时器来轮流订阅蓝牙的多个特征值,具体如下:
-
notifyBLECharacteristicValueChange() { let _this = this; let deviceId = _this.mDevice.deviceId;//这里是蓝牙设备id let serviceId = SERVICE_UUID;//这里是蓝牙的服务UUID let reads = readUUID3;//这里是需要订阅的特征值UUID的数组,[特征值1,特征值2,特征值n] let num = numberReadUUID;//这里是需要订阅的特征值的个数 // let characteristicId = reads[0]; let countConnect = 0;//连接次数统计 let cID=0;//要订阅的特征值的编号 _this.notifyCycleTimer = setInterval(()=>{ let characteristicId = reads[cID];//要订阅的特征值 countConnect = countConnect+1; if(countConnect>10){//连接超过10次没有连接成功就直接返回 uni.hideLoading(); clearInterval(_this.notifyCycleTimer);//注册超时,清理掉定时器 closeBLEConnection();//注册超时就断开蓝牙的连接 closeBluetoothAdapter();//注册超时就关闭蓝牙适配器 uni.showModal({ title: '提示', content: '蓝牙连接失败,请重试!', showCancel:false, complete:function(){ //返回上一界面 uni.navigateBack({ delta:1 }); } }); } uni.notifyBLECharacteristicValueChange({ state: true, // 启用 notify 功能 deviceId, serviceId, characteristicId, success(res) { console.log('notifyBLECharacteristicValueChange success:' + characteristicId); cID=cID+1;//订阅成功就订阅下一个特征 if(cID==num){ uni.hideLoading(); clearInterval(_this.notifyCycleTimer);//注册监听成功就清理掉定时器 //返回上一界面 uni.navigateBack({ delta:1 }); } }, fail(e) { console.log("订阅失败"); } }); },500);//每隔500ms执行一次订阅 },
1 个评论
要回复文章请先登录或注册
1***@qq.com