支付寶小程序藍(lán)牙 快速接入

2018-10-10 15:28 更新

基本流程

對于有藍(lán)牙接入需求的開發(fā)者,需要通過以下步驟完成藍(lán)牙接入:

  1. 初始化藍(lán)牙接口(my.openBluetoothAdapter)
  2. 初始化事件監(jiān)聽
    • 藍(lán)牙適配器狀態(tài)監(jiān)聽(my.onBluetoothAdapterStateChange)
    • 藍(lán)牙發(fā)現(xiàn)事件監(jiān)聽(my.onBluetoothDeviceFound)
    • 藍(lán)牙連接狀態(tài)事件監(jiān)聽(my.onBLEConnectionStateChanged)
  3. 搜索設(shè)備(my.startBluetoothDevicesDiscovery)
  4. 查找設(shè)備并連接(my.connectBLEDevice)
  5. 停止搜索設(shè)備(my.stopBluetoothDevicesDiscovery)
  6. 遍歷藍(lán)牙外設(shè)服務(wù)和特征
    • 獲取服務(wù)(my.getBLEDeviceServices)
    • 獲取特征(my.getBLEDeviceCharacteristics)
  7. 監(jiān)聽特征值變化事件通知(my.onBLECharacteristicValueChange)
  8. 設(shè)置讀特征通知模式(my.notifyBLECharacteristicValueChange)
  9. 讀寫數(shù)據(jù)
    • 向設(shè)備的特征值寫數(shù)據(jù)(my.writeBLECharacteristicValue)
    • 向設(shè)備的特征值讀數(shù)據(jù)(my.readBLECharacteristicValue)
  10. 斷開連接(my.disconnectBLEDevice)
  11. 關(guān)閉藍(lán)牙適配器(my.closeBluetoothAdapter)

業(yè)務(wù)流程圖

藍(lán)牙調(diào)用流程圖

調(diào)用示例

//初始化
my.openBluetoothAdapter({
  success: (res) => {
    console.log(res);
  }
});
//注冊發(fā)現(xiàn)事件
my.onBluetoothDeviceFound({
  success: (res) => {
    let device = res.devices[0];
    //連接發(fā)現(xiàn)的設(shè)備
    my.connectBLEDevice({
      deviceId: deviceId,
      success: (res) => {
        console.log(res)
      },
      fail:(res) => {
      },
      complete: (res)=>{
      }
    });
    //停止搜索
    my.stopBluetoothDevicesDiscovery({
      success: (res) => {
        console.log(res)
      },
      fail:(res) => {
      },
      complete: (res)=>{
      }
    });
  }
}); 
//注冊連接事件
my.onBLEConnectionStateChanged({
  success: (res) => {
    console.log(res);
    if (res.connected) {
        //開始讀寫notify等操作
        my.notifyBLECharacteristicValueChange({
          deviceId: deviceId,
          serviceId: serviceId,
          characteristicId: characteristicId,
          success: (res) => {
            console.log(res)
          },
          fail:(res) => {
          },
          complete: (res)=>{
          }
        });
    }
  }
});
//注冊接收read或notify的數(shù)據(jù)
my.onBLECharacteristicValueChange({
  success: (res) => {
    console.log(res);
  }
});
//開始搜索
my.startBluetoothDevicesDiscovery({
  services: ['fff0'],
  success: (res) => {
    console.log(res)
  },
  fail:(res) => {
  },
  complete: (res)=>{
  }
});


//斷開連接
my.disconnectBLEDevice({
  deviceId: deviceId,
  success: (res) => {
    console.log(res)
  },
  fail:(res) => {
  },
  complete: (res)=>{
  }
});


//注銷事件
my.offBluetoothDeviceFound();
my.offBLEConnectionStateChanged();
my.offBLECharacteristicValueChange();


//退出藍(lán)牙模塊
my.closeBluetoothAdapter({
  success: (res) => {
  },
  fail:(res) => {
  },
  complete: (res)=>{
  }
});

常見問題

  1. 支持版本 android4.3以上支持ble
  2. ios6以上都支持
  3. deviceId,android取到的是藍(lán)牙的mac地址(11:22:33:44:55:66),ios取到的是UUID(00000000-0000-0000-0000-000000000000這種格式)
  4. 調(diào)startBluetoothDevicesDiscovery接口搜索不到設(shè)備,請確保設(shè)備發(fā)出了廣播。如果接口中有傳入services,請確保設(shè)備的廣播內(nèi)容中包含了service的UUID
  5. 連接設(shè)備失敗,請確認(rèn)傳入的deviceId是否正確,以及設(shè)備發(fā)出的信號(hào)是否足夠強(qiáng),在信號(hào)弱的時(shí)候可能會(huì)出現(xiàn)連接不上的情況
  6. 寫數(shù)據(jù)失敗,查看傳入的deviceId、serviceId、characteristicId格式是否正確,deviceId是否已連接上(onBLEConnectionStateChanged這個(gè)事件中可以監(jiān)聽連接狀態(tài)變化,getConnectedBluetoothDevices這個(gè)方法可以拿到),確保是在連接狀態(tài)下調(diào)寫入方法,查看characteristicId是否屬于這個(gè)service,以及這個(gè)特征值是否支持寫
  7. 讀數(shù)據(jù)失敗,同上,查看這個(gè)特征值是否支持讀
  8. 收不到數(shù)據(jù)通知,請確認(rèn)調(diào)了notifyBLECharacteristicValueChange這個(gè)方法以及傳入的參數(shù)是否正確,傳入的characteristicId特征值是否支持notify或indicate,以及確認(rèn)硬件是否發(fā)出了通知。注意調(diào)用notifyBLECharacteristicValueChange方法的以及注冊onBluetoothDeviceFound事件的順序,最好是在連接之后就調(diào)用notifyBLECharacteristicValueChange方法。
  9. 事件回調(diào)多次調(diào)用,是由于多次匿名函數(shù)注冊監(jiān)聽同一事件,因此建議每次調(diào)用on方法監(jiān)聽事件之前,先調(diào)用off方法,關(guān)閉之前的事件監(jiān)聽。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)