问题描述:
1.启动app,搜索并连接蓝牙成功后,第一次采集数据正常; 问题定位
1.复现问题,根据测试提供的方法,先测试iphone正常,三星S7edge,结果是能正常连接蓝牙,后来又测试vivo x7plus和小米MI5,终于成功复现该问题; 问题修复
上述问题定位中,(3)可以发现应该是没有断开上次蓝牙连接导致的,(4)又发现,重新搜索蓝牙以后再连接可以解决该问题; wx.createBLEConnection({ deviceId: deviceId, success: function (res) { //连接成功 initnotifyCharacteristic(notifyCharacteristic);// 指定特征值,并进行数据交互 // 已连接 _bthConnectStaus = BTH_STATUS_CONNECTED; }, fail: function (res) {// 连接蓝牙失败 _bthConnectStaus = BTH_STATUS_DISCONNECT; // 回调上层蓝牙连接失败 callback(res.errCode, "connect failed") } 然后根据fail中的res.errCode判断是否10003。 if(code == 10003) { // 部分android手机特殊情况下需要重新搜索才能连接蓝牙,此时报错10003,进行蓝牙搜索(ps:原因可能是系统中将手机蓝牙关闭导致连接状态不能改为断开,导致下次无法连接同一个设备) var timeId = setTimeout(function () { stopSearchBluetooth(); callback(false, "timout") }, 5000); // 最多搜索5s searchBluetooth(function (res) { if (res.devices === undefined || res.devices === null) { return; } for (var i = 0; i < res.devices.length; i++) { if (res.devices[i] && res.devices[i].deviceId == deviceId) { // 搜索到该设备 console.log("searchDeviceAndReConnect:find device and re connect"); clearTimeout(timeId); stopSearchBluetooth() // 停止搜索 callback(true, "find device");// 找到设备,在回调函数中连接蓝牙 break; } } }, function (res) { clearTimeout(timeId); stopSearchBluetooth() // 停止搜索 callback(false, "searchBluetooth fail") }); }
上述代码提供了一个简单的流程,当连接出现10003错误时,搜索蓝牙设备,找到后,重新连接蓝牙。
相关问题
1.微信小程序蓝牙连接仅支持4.0,而BLE低功耗蓝牙设备是带有定位功能的,所以,需要有定位权限,部分手机(如vivo x7plus)需要打开手机定位功能才能搜索到蓝牙设备,详细可百度 “Android6.0蓝牙BLE连接,定位动态权限相关” Android机型多,BLE低功耗蓝牙也不是很稳定,这就导致了在Android上开发蓝牙会有很多奇怪的问题,而微信小程序基于Android和IOS,相应的也会出现一些问题,IOS还好,系统软硬件都单一,但Android的问题就多了,之前开发还遇到一些需要注意的,暂时想不起来,后续再补充 |