問題描述:
1.啟動app,搜索并連接藍牙成功后,第一次采集數據正常; 問題定位
1.復現問題,根據測試提供的方法,先測試iphone正常,三星S7edge,結果是能正常連接藍牙,后來又測試vivo x7plus和小米MI5,終于成功復現該問題; 問題修復
上述問題定位中,(3)可以發現應該是沒有斷開上次藍牙連接導致的,(4)又發現,重新搜索藍牙以后再連接可以解決該問題; 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錯誤時,搜索藍牙設備,找到后,重新連接藍牙。
相關問題
1.微信小程序藍牙連接僅支持4.0,而BLE低功耗藍牙設備是帶有定位功能的,所以,需要有定位權限,部分手機(如vivo x7plus)需要打開手機定位功能才能搜索到藍牙設備,詳細可百度 “Android6.0藍牙BLE連接,定位動態權限相關” Android機型多,BLE低功耗藍牙也不是很穩定,這就導致了在Android上開發藍牙會有很多奇怪的問題,而微信小程序基于Android和IOS,相應的也會出現一些問題,IOS還好,系統軟硬件都單一,但Android的問題就多了,之前開發還遇到一些需要注意的,暫時想不起來,后續再補充 |