问题描述:
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的问题就多了,之前开发还遇到一些需要注意的,暂时想不起来,后续再补充 |