10003是微信蓝牙毗连经常遇到的问题,,,微信官方给出的文档中就简朴的形貌为connection fail,,,备注为毗连失败。。。。。。那么详细究竟是什么原因。。。。。。

10003是微信蓝牙毗连经常遇到的问题,,,微信官方给出的文档中就简朴的形貌为“connection fail”,,,备注为“毗连失败”。。。。。。然而,,,现实上泛起10003的状态有许多,,,好比凭证deviceId毗连蓝牙时,,,蓝牙装备未开启或异常导致无法毗连;蓝牙装备被占用或者上次蓝牙毗连未断启发致无法毗连;;;;;泛起该过失后,,,去微信官方社区追求资助,,,在社区发明了整整4页(奖金40条)都是反馈该问题,,,然而都没有获得官方回复,,,有极个体解决了的也不适用于我的情形;;;;;于是,,,只有自己剖析。。。。。。
问题形貌:
1.启动app,,,搜索并毗连蓝牙乐成后,,,第一次收罗数据正常;;;;;
2.下次收罗若是手机蓝牙是翻开的,,,也能正常收罗;;;;;
3.但若是手机蓝牙关闭,,,点击收罗数据试图毗连,,,提醒用户翻开手机蓝牙;;;;;当翻开手机蓝牙后再去毗连蓝牙,,,此时会毗连不上,,,报错10003;;;;;
4.后续会一致连不上蓝牙,,,不管是重启小程序照旧重新关闭翻开蓝牙,,,都不可正常毗连蓝牙装备。。。。。。
问题定位
1.复现问题,,,凭证测试提供的要领,,,先测试iphone正常,,,三星S7edge,,,效果是能正常毗连蓝牙,,,厥后又测试vivo x7plus和小米MI5,,,终于乐成复现该问题;;;;;
2.针对10003过失在微信开发社区找解决方案,,,可是面临着几十条相似问题,,,险些都没有获得解决,,,有几条说在毗连前先挪用wx.closeBLEConnection断开上次毗连,,,实验后,,,不可解决我的问题;;;;;
3.既然没有找到现成的解决方案,,,就只有跟踪代码了,,,在要害要领中加日志;;;;;发明,,,在顶部栏关闭手机蓝牙时,,,小程序中无法断开蓝牙毗连,,,报错(10001(not available)目今蓝牙适配器不可用);;;;;
4.厥后又在无意情形下,,,扫除了蓝牙装备的绑定关系,,,重新进入蓝牙搜索页面,,,发明这样操作后竟然能乐成毗连上蓝牙。。。。。。
问题修复
上述问题定位中,,,(3)可以发明应该是没有断开上次蓝牙毗连导致的,,,(4)又发明,,,重新搜索蓝牙以后再毗连可以解决该问题;;;;;
于是凭证这两个偏向去找解决方案:
1.既然是由于没有断开蓝牙毗连导致的,,,那就在关闭手机蓝牙时去断开蓝牙;;;;;然而,,,在蓝牙状态监听中挪用断开毗连函数,,,返回过失(10001(not available)目今蓝牙适配器不可用);;;;;
2.于是只能思量重新搜索蓝牙后再毗连的要领,,,在泛起10003过失后,,,重新搜索蓝牙,,,并且在找到对应的装备后举行蓝牙毗连;;;;;修改代码重复测试,,,凭证日志显示,,,确实是泛起了10003,,,然后进入搜索??,,,搜到指定装备后举行蓝牙毗连,,,之后毗连乐成,,,这个方案解决了该问题。。。。。。
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过失时,,,搜索蓝牙装备,,,找到后,,,重新毗连蓝牙。。。。。。
思量到只有部分手机泛起10003过失,,,以是会先毗连一次蓝牙,,,报错10003才举行,,,以免其他手时机由于搜索蓝牙导致毗连蓝牙收罗数据的速率减慢;;;;;
虽然10003,,,不但是该问题才报的错,,,所有,,,在装备没有翻开蓝牙时也报10003,,,而由于加了搜索逻辑,,,在装备没有翻开蓝牙时的提醒就会慢一点(装备蓝牙没翻开需要提醒用户翻开装备蓝牙),,,不过幸亏这一点影响不大,,,现在没有好的思绪去解决,,,后续再逐步研究。。。。。。
该要领仅解决了我这种情形,,,10003泛起的情形许多,,,不过基本上可以从上一次蓝牙毗连是否竣事来定位,,,重新搜索蓝牙后举行毗连也是基于上次蓝牙毗连未断开这一情形
相关问题
1.微信小程序蓝牙毗连仅支持4.0,,,而BLE低功耗蓝牙装备是带有定位功效的,,,以是,,,需要有定位权限,,,部分手机(如vivo x7plus)需要翻开手机定位功效才华搜索到蓝牙装备,,,详细可百度 “Android6.0蓝牙BLE毗连,,,定位动态权限相关”
2.凭证services挪用wx.startBluetoothDevicesDiscovery搜索蓝牙时,,,若是搜索不到,,,可以去掉services试试,,,我的一台测试机(印象中是华为P6)就泛起带services搜索不到装备,,,最后只能去掉services, 然后在搜索到的效果中举行过滤
3.wx.startBluetoothDevicesDiscovery搜索蓝牙时,,,一般人都知道使用wx.onBluetoothDeviceFound,,,然后部分手机在短时间内举行第二次搜索onBluetoothDeviceFound回调中不可获得所有的装备,,,此时可以试试wx.getBluetoothDevices,,,这个要领可以获取到缓存的蓝牙装备,,,这一部分缓存的蓝牙装备在部分手机中不会再泛起在wx.onBluetoothDeviceFound中
4.毗连蓝牙后,,,在举行写操作时,,,若是写失败,,,请检查是否设置了characteristicId,,,这个特征值每次做写操作时都要带上
Android机型多,,,BLE低功耗蓝牙也不是很稳固,,,这就导致了在Android上开发蓝牙会有许多希奇的问题,,,而微信小程序基于Android和IOS,响应的也会泛起一些问题,,,IOS还好,,,系统软硬件都简单,,,但Android的问题就多了,,,之前开发回遇到一些需要注重的,,,暂时想不起来,,,后续再增补
小程序工具提供多类型商城/门店小程序制作,,,可视化编辑 1秒天生5步上线。。。。。。通过拖拽、拼接??榻峁剐〕绦蛏坛且趁,,,所看即所得,,,只需要美工就能做出细腻商城。。。。。。
KESION pp电子软件
KESION pp电子软件是海内领先的在线教育软件及私域社交电商软件服务提供商,,,恒久专注于为企业提供在线教育软件及社交电商SaaS平台解决方案。。。。。。
公司焦点产品云开店SaaS社交电商服务平台、在线教育SaaS服务平台、教育企业数字化SaaS云平台、企微营销助手、私有化自力安排品牌网校和在线教育咨询等。。。。。。KESION 一直通过手艺立异,,,提供产品和服务,,,助力企业向数字化转型,,,通过科技驱动商业刷新,,,让商业变得更智慧!
微信小程序开发,,,请求服务器API的要领使用的是微信官方提供的wx.request()要领。。。。。。...
小程序前端AES加密是一个非;;;;;镜挠τ贸【,,,关于aes加密应该要怎样操作,,,下面为各人介绍。。。。。。...