6、連線已發現的藍芽裝置(createBLEConnection)

無聊達612發表於2019-04-11

wx.createBLEConnection(Object object)

基礎庫 1.1.0 開始支援,低版本需做相容處理

連線低功耗藍芽裝置。

若小程式在之前已有搜尋過某個藍芽裝置,併成功建立連線,可直接傳入之前搜尋獲取的 deviceId 直接嘗試連線該裝置,無需進行搜尋操作。

引數

Object object

屬性型別預設值必填說明
deviceIdstring 用於區分裝置的 id
timeoutnumber 超時時間,單位ms,不填表示不會超時
successfunction 介面呼叫成功的回撥函式
failfunction 介面呼叫失敗的回撥函式
completefunction 介面呼叫結束的回撥函式(呼叫成功、失敗都會執行)

注意

  • 請保證儘量成對的呼叫 createBLEConnection 和 closeBLEConnection 介面。安卓如果多次呼叫 createBLEConnection 建立連線,有可能導致系統持有同一裝置多個連線的例項,導致呼叫 closeBLEConnection 的時候並不能真正的斷開與裝置的連線。
  • 藍芽連線隨時可能斷開,建議監聽 wx.onBLEConnectionStateChange 回撥事件,當藍芽裝置斷開時按需執行重連操作
  • 若對未連線的裝置或已斷開連線的裝置呼叫資料讀寫操作的介面,會返回 10006 錯誤,建議進行重連操作。

 

lanyatest.wxml程式碼:

<!--pages/lanyatest/lanyatest.wxml-->
<view class="contentview">

  <view  class='myview' >
    
      {{info}}
    

  </view>

  <button type="primary" class="button" bindtap="lanyatest1">1初始化藍芽</button>
  <button type="primary" class="button" bindtap="lanyatest2">2獲取藍芽狀態</button>
  <button type="primary" class="button" bindtap="lanyatest3">3搜尋周邊裝置</button>
  <button type="primary" class="button" bindtap="lanyatest4">4獲取所有裝置</button>
  <block wx:for="{{devices}}" wx:key="{{test}}">
  <button type="primary" class="button" id="{{item.deviceId}}" style='background-color:red' bindtap="lanyaconnect">5連線{{item.name}}
  </button>
  </block>
</view>

 

lanyatest.js程式碼:

// pages/lanyatest/lanyatest.js
Page({

  /**
   * 頁面的初始資料
   */
  data: {
    info:"未初始化藍芽介面卡",
    connectedDeviceId:""
  },

  lanyatest1(event){
    var that = this;
    wx.openBluetoothAdapter({
      success: function (res) {
        console.log('初始化藍芽介面卡成功')
        //頁面日誌顯示
        that.setData({
          info: '初始化藍芽介面卡成功'
        })
      },
      fail: function (res) {
        console.log('請開啟藍芽和定位功能')
        that.setData({
          info: '請開啟藍芽和定位功能'
        })
      }
    })
  },



  lanyatest2(event){
    var that = this;
    wx.getBluetoothAdapterState({

      success: function (res) {

        //列印相關資訊
        console.log(JSON.stringify(res.errMsg) + "\n藍芽是否可用:" + res.available);

        that.setData({
          info: JSON.stringify(res.errMsg) +"\n藍芽是否可用:" + res.available
        })

      },
      fail: function (res) {

        //列印相關資訊
        console.log(JSON.stringify(res.errMsg) + "\n藍芽是否可用:" + res.available);

        that.setData({
          info: JSON.stringify(res.errMsg) + "\n藍芽是否可用:" + res.available
        })

      }
      
    })

  },



  lanyatest3(event){
    var that = this;
    wx.startBluetoothDevicesDiscovery({
      services: ['FEE7'], //如果填寫了此UUID,那麼只會搜尋出含有這個UUID的裝置,建議一開始先不填寫或者註釋掉這一句
      success: function (res) {
        that.setData({
          info: "搜尋裝置" + JSON.stringify(res),
        })
        console.log('搜尋裝置返回' + JSON.stringify(res))

      }
    })

  },




  lanyatest4(event){
    var that = this;
    wx.getBluetoothDevices({
      success: function (res) {

        that.setData({
          info: "裝置列表\n" + JSON.stringify(res.devices),
          devices: res.devices
        })
        console.log('搜裝置數目:' + res.devices.length)
        console.log('裝置資訊:\n' + JSON.stringify(res.devices)+"\n")
      }
    })

  },



  lanyaconnect(event){
    var that = this;
    wx.createBLEConnection({
      deviceId: event.currentTarget.id,
      success: function (res) {
        console.log('除錯資訊:' + res.errMsg);
        that.setData({
          connectedDeviceId: event.currentTarget.id,
          info: "MAC地址:" + event.currentTarget.id  + '  除錯資訊:' + res.errMsg,
          
        })
      },
      fail: function () {
        console.log("連線失敗");
      },

    })

  }



//我刪除了自動生成的生命週期函式

})

lanyatest.wxss程式碼:

/* pages/lanyatest/lanyatest.wxss */
.vertical{
  display: flex;
  flex-direction: column;
}

/**index.wxss**/
.horizontal{
  display: flex;
  flex-direction: row;
}

.btinfo{
  height:100px;
}

.contentview {
margin: 0 10px;
}
 
.button {
margin: 5px;
}

.myview{
  height:200px;
  word-break:break-all;/* 自動換行 */
}

真機除錯結果:

 

 

 

 

相關文章