千家信息网

小程序蓝牙连接10003怎么解决

发表于:2025-11-16 作者:千家信息网编辑
千家信息网最后更新 2025年11月16日,今天小编给大家分享一下小程序蓝牙连接10003怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一
千家信息网最后更新 2025年11月16日小程序蓝牙连接10003怎么解决

今天小编给大家分享一下小程序蓝牙连接10003怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

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

以上就是"小程序蓝牙连接10003怎么解决"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

蓝牙 搜索 设备 问题 手机 定位 程序 情况 错误 成功 方法 部分 测试 数据 方案 知识 篇文章 代码 只有 官方 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 涉密软件开发保密室清单 中国移动域名解析服务器故障 湖南定制软件开发公司 最小巧的ftp服务器 android代理软件开发 数据库安全管理技术有哪些 银行监控中心管理服务器 关于软件开发的面试题 提高网络安全意识主题班会纪实 湖北麻将软件开发 网络技术点选上海百首网络 幸福工厂服务器管理是什么 电大计算机网络技术学什么 王者qq区找不到之前的服务器 泰康人寿软件开发怎么样 服务器并发量计算 对日软件开发程序员招聘 通信软件开发考试试卷 网络安全的层次体系结构 电脑网络安全采取的措施 有关网络安全方面的体验 软件销售与软件开发合同区别 ibm服务器启动u盘按什么键 我的世界服务器是只能正版 卡力互联网科技 数据库数据脚本迁移 幼儿园网络安全责任制 万间网络技术有限公司 软件开发人员配置明细 辽宁智能土地资产管理软件开发
0