微信小程序蓝牙连接错误分析及解决

技术标签: 小程序开发  微信小程序开发

当打开手机蓝牙后去连接蓝牙,会出现连接不上情况,报错10003,此时不管是重启小程序还是重新关闭打开蓝牙,都不能正常连接蓝牙设备。10003是微信蓝牙连接经常碰到的问题,微信官方给出的文档中就简单的描述为“connection fail”,备注为“连接失败”。然而,实际上出现连接失败的状况有很多,比如蓝牙设备被占用或者上次蓝牙连接未断开导致无法连接;根据deviceId连接蓝牙时,蓝牙设备未开启或异常导致无法连接。

既然是因为没有断开蓝牙连接导致的,那就在关闭手机蓝牙时去断开蓝牙;然而,在蓝牙状态监听中调用断开连接函数,返回错误(10001(not available)当前蓝牙适配器不可用)。

没有找到现成的解决方案,就只有跟踪代码了,在关键方法中加日志;发现,在顶部栏关闭手机蓝牙时,小程序中无法断开蓝牙连接,报错(10001(not available)当前蓝牙适配器不可用);后来又在偶然情况下,清除了蓝牙设备的绑定关系,重新进入蓝牙搜索页面,发现这样操作后竟然能成功连接上蓝牙。

微信小程序蓝牙连接问题分析及解决

上述问题定位中,可以发现应该是没有断开上次蓝牙连接导致的,重新搜索蓝牙以后再连接可以解决该问题;于是只能考虑重新搜索蓝牙后再连接的方法,在出现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, connectfailed)

}

然后根据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, finddevice);// 找到设备,在回调函数中连接蓝牙

break;

}

}

}, function (res) {

clearTimeout(timeId);

stopSearchBluetooth() // 停止搜索

callback(false, searchBluetoothfail)

});

}

上述代码提供了一个简单的流程,当连接出现10003错误时,搜索蓝牙设备,找到后,重新连接蓝牙。

当然10003,不只是该问题才报的错,所有,在设备没有打开蓝牙时也报10003,而因为加了搜索逻辑,在设备没有打开蓝牙时的提醒就会慢一点(设备蓝牙没打开需要提醒用户打开设备蓝牙),不过好在这一点影响不大,目前没有好的思路去解决,后续再慢慢研究。

考虑到只有部分手机出现10003错误,所以会先连接一次蓝牙,报错10003才进行,以免其他手机会因为搜索蓝牙导致连接蓝牙采集数据的速度减慢;10003出现的情况很多,不过基本上可以从上一次蓝牙连接是否结束来定位,重新搜索蓝牙后进行连接也是基于上次蓝牙连接未断开这一情况。


强力推荐小程序培训学院提供更多小程序制作入门****,更多资讯关注小程序开发教程

来源:网络


智能推荐

微信小程序渲染层错误

微信小程序报错如下: 情况:   在测试版开发,开发完成之后切换到生产环境,再次编译运行,就报了这个错,开发的时候都好好的,切换到的正式小程序账号就报错了 … 很无奈啊~~~再次切换至测试号(开发环境),这儿错误也不消失 …   预览、真机预览、上传到体验版用手机扫,都没问题,就是开发者工具报错   把后开发的...

微信小程序错误收录

1 警告:Some selectors are not allowed in component wxss, including tag name selectors, ID selectors, and attribute selectors less文件是这样写的: 用类去写样式就不会有这个警告 2 警告:[sitemap 索引情况提示] 根据 sitemap 的规则[0],当前页面 [pag...

开发微信小程序时,发生 "request:fail 发生了 SSL 错误无法建立与该服务器的安全连接。"错误的解决方案

1、微信小程序真机调试界面如下: 2、检测域名是否添加 3、苹果ATS检测 https://cloud.tencent.com/product/ssl#userDefined10 4、Windows 2008系统在IIS中开启TLS1.2 1、绑定好证书 2、运行regedit 3、开启TLS1.2 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Cont...

微信小程序1rpx border ios真机显示不全问题分析及解决方案

微信小程序在iphone6或6p真机上如果有一排有边框的标签时,可能会出现个别边框显示不全的问题,下面进行一步一步分析 1.页面内容如下 wxml内容: <view class='title'> 您喜欢下面那个公司? </view> <view class='label-con'> <view class='label'>中国移动</view&...

微信小程序连接java后端

所需环境 1.微信开发者工具 2.eclipse 小程序端 Java后端 运行结果 注意事项 不校验合法域名在详情中,这个勾勾一定要勾上,不然就会这样 最后代码附上 w微信端wxml: 微信端js: java后端的servlet:...

猜你喜欢

eclipse生成类图(使用AmaterasUML插件)

1、安装AmaterasUML插件 官网下载最新版本的AmaterasUML_1.3.4.zip,将解压后的3个jar包放至eclipse安装目录下的plugins文件夹下   2、重启eclipse 项目右键 -- New -- Other... 找到AmaterasUML下的Class Diagram -- Next -- Finish 会在项目下创建一个newfile.cld文件并...

用Git & TortoiseGit 上传代码

用Git & TortoiseGit 上传代码 1.下载安装好Git、TortoiseGit 2.打开华为云进入开发云,“设置我的HTTPS密码”,根据提示绑定好QQ邮箱,重置密码,记住上面的账户名和密码 3.打开代码 – 代码托管–普通新建,随便写一个仓库名称,确定建好仓库 4.点仓库名称进入仓库,点右上角的“克隆/下载&rdq...

校园宣传微信小程序-校园会议+成绩查询+教师查询等N多功能 提供前后台

(注:本项目为原创项目 若转载或引用请联系QQ504546888  备注学校宣传    提前台页面  由于学校原因不提供数据库及完整数据,但提供数据库架构) 前台环境:微信开发者工具+HTML 后台环境:SSM框架+MySQL   小程序的发展过程中,追求时尚个性的大学生是推动的主力军之一。小程序无需下载,用完即走,这种轻便风格很受大学生...

linux安装Elasticsearch及kibana

准备 1.需要先安装jdk1.8 及配置环境变量(因为Elasticsearch是由Java开发的) 2.去Elasticsearch官网下载安装包(https://www.elastic.co/downloads/past-releases) 3.ES中文网 https://es.xiaoleilu.com/ 安装 设置elasticsearch.yml 如下 此时执行bin目录的 ./elas...

深度学习: Zero-shot Learning / One-shot Learning / Few-shot Learning

Introduction 在 迁移学习 中,由于传统深度学习的 学习能力弱,往往需要 海量数据 和 反复训练 才能修得 泛化神功 。为了 “多快好省” 地通往炼丹之路,炼丹师们开始研究 Zero-shot Learning / One-shot Learning / Few-shot Learning。 爱上一匹野马 (泛化能力),可我的家里没有草原 (海量数据) 。 Le...

问答精选

Improving the performance of XSL

I am using the below XSL 2.0 code to find the ids of the text nodes that contains the list of indices that i give as input. the code works perfectly but in terms for performance it is taking a long ti...

Listview with different layout inflation for each row

I'm fairly new to designing UIs in Android (And fairly new to Android development as well). I'm currently developing an Android application that looks a lot like Google+'s "All Circles" page...

Get Client IP during Logging in

So I have a static method to get the client IP using HttpContext. This works fine when the user is already logged in, but doesn't work if i try to get IP during logging in since HttpContext.Current is...

How to delete duplicate rows in this specific statement

I have seen some good examples for deleting duplicate rows, but my attempts fail. Something in this won't let it happen. Errors don't tell me anything to help me know whats wrong with it. I won't incl...

Correct way to suppress Xcode's unused function warning for inline functions in library header

What is the correct way to suppress Xcode's unused function warning for functions in a library header? For example, I have the following function defined in MathUtils.h: Source files which include thi...

相关问题

相关文章

热门文章

推荐文章

相关标签

推荐问答