首頁  >  文章  >  微信小程式  >  淺談小程式開發中藍牙連線錯誤分析及解決方法

淺談小程式開發中藍牙連線錯誤分析及解決方法

青灯夜游
青灯夜游轉載
2020-04-25 09:32:376867瀏覽

淺談小程式開發中藍牙連線錯誤分析及解決方法

當打開手機藍牙後去連接藍牙,會出現連接不上情況,報錯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中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除