.net 讀藍芽資料_小程式 藍芽重連異常 errCode:10004
阿新 • • 發佈:2021-01-03
技術標籤:.net 讀藍芽資料
原文地址:
https://blog.csdn.net/lq545209147/article/details/108578548
專案場景:
微信小程式,支付寶小程式,uniapp
問題描述:
小程式低功耗藍芽(BLE)斷開(主動或自動)連線重連後無法傳送內容給藍芽裝置
wx.writeBLECharacteristicValue({
//常用引數不展示,這裡只展示異常進入回撥
fail(e){
//這裡可能會輸出10004 或者 10005
console.error("error",e);
}
})
原因分析:
思考:
我們第一次連線藍芽的時候都是正常的(已獲取到deviceId,serviceId,characteristicId),並且能成功傳送資料,為神馬斷開後就不行了呢?
解決:
個人猜測微信會快取當前裝置的所有 serviceId 和對應的 characteristicId ,當我們呼叫斷開連線(wx.closeBLEConnection)或者異常斷開後,會清空快取列表。而傳送資料(wx.writeBLECharacteristicValue)中需要指定 (deviceId,serviceId,characteristicId),則會去快取中查詢,故此查詢不到。因此只需要在傳送之前,再次呼叫查詢介面即可解決。
解決方案:
重新掃描一次當前裝置的 serviceId 和 characteristicId 即可
let deviceId = this.deviceId; let serviceId = this.serviceId; let characteristicId = this.characteristicId; //vue使用者,請自行吧fns的方法放入methods let fns = { reconnection(succ,fail){ wx.openBluetoothAdapter({ success :(res) => { wx.createBLEConnection({ deviceId : deviceId , success : (res) => { fns.searchServices(() => { fns.serachCharacteristics(succ,fail) },fail) }, fail : fail }) }, fail : fail }) }, searchServices(succ,fail){ wx.getBLEDeviceServices({ deviceId : deviceId, success : succ, fail : fail }) }, serachCharacteristics(succ,fail){ wx.getBLEDeviceCharacteristics({ deviceId : deviceId, serviceId : serviceId, success : succ, fail : fail }) }, } //重連 fns.reconnection((succ) => { console.log("重連成功,可以呼叫 wx.writeBLECharacteristicValue") },(err) => { console.log("err:",err) });
附送錯誤碼查詢地址:https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.writeBLECharacteristicValue.html