當打開手機藍牙後去連接藍牙,會出現連接不上情況,報錯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出現的情況很多,不過基本上可以從上一次藍牙連線是否結束來定位,重新搜尋藍牙後進行連線也是基於上次藍牙連線未中斷此狀況。
推薦:《小程式開發教學》
以上是淺談小程式開發中藍牙連線錯誤分析及解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!