專案場景:
微信小程式,支付寶小程式,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://www.uj5u.com/qita/55713.html
標籤:AI
上一篇:Python中Arima預測問題
下一篇:兩個串列邏輯回傳值問題求助!!
