快應(yīng)用 藍(lán)牙

2020-08-07 16:22 更新

接口聲明

{ "name": "system.bluetooth" }

導(dǎo)入模塊

import bluetooth from '@system.bluetooth' 或 var bluetooth = require("@system.bluetooth")

接口定義

bluetooth.openAdapter(OBJECT)

初始化藍(lán)牙模塊

參數(shù):

參數(shù)名類型必填說明
operateAdapterBoolean是否打開系統(tǒng)藍(lán)牙開關(guān)。設(shè)置為 true,在系統(tǒng)藍(lán)牙開關(guān)關(guān)閉的情況下會(huì)彈框提示是否打開。默認(rèn)值 false。
successFunction成功回調(diào)。
failFunction失敗回調(diào)。
completeFunction執(zhí)行結(jié)束后的回調(diào)。

示例:

bluetooth.openAdapter({
  success: function() {
    console.log('success')
  },
  fail: function(data, code) {
    console.log(`handling fail, code = ${code}`)
  },
  complete: function() {
    console.log('complete')
  }
})

bluetooth.closeAdapter(OBJECT)

關(guān)閉藍(lán)牙模塊。調(diào)用該方法將斷開所有已建立的連接并釋放系統(tǒng)資源。建議在使用藍(lán)牙流程后,與 bluetooth.openAdapter 成對(duì)調(diào)用。

參數(shù):

參數(shù)名類型必填說明
operateAdapterBoolean是否關(guān)閉系統(tǒng)藍(lán)牙開關(guān)。設(shè)置為 true,調(diào)用時(shí)會(huì)關(guān)閉系統(tǒng)藍(lán)牙開關(guān)。默認(rèn)值 false。
successFunction成功回調(diào)。
failFunction失敗回調(diào)。
completeFunction執(zhí)行結(jié)束后的回調(diào)。

示例:

bluetooth.closeAdapter({
  success: function() {
    console.log('success')
  },
  fail: function(data, code) {
    console.log(`handling fail, code = ${code}`)
  },
  complete: function() {
    console.log('complete')
  }
})

bluetooth.getAdapterState(OBJECT)

獲取本機(jī)藍(lán)牙適配器狀態(tài)。

OBJECT 參數(shù):

參數(shù)名類型必填說明
successFunction成功回調(diào)。
failFunction失敗回調(diào)。
completeFunction執(zhí)行結(jié)束后的回調(diào)
success 返回值:
參數(shù)名類型描述
availableBoolean藍(lán)牙適配器是否可用
discoveringBoolean是否正在搜索設(shè)備

示例:

bluetooth.getAdapterState({
  success: function(data) {
    console.log(
      `handling adapter state, available = ${data.available}, discovering = ${
        data.discovering
      }`
    )
  },
  fail: function(data, code) {
    console.log(`handling fail, code = ${code}`)
  },
  complete: function() {
    console.log('complete')
  }
})

bluetooth.onadapterstatechange = function(data)

監(jiān)聽藍(lán)牙適配器狀態(tài)變化事件

data 返回值:

參數(shù)名類型描述
availableBoolean藍(lán)牙適配器是否可用
discoveringBoolean藍(lán)牙適配器是否處于搜索狀態(tài)

示例:

bluetooth.onadapterstatechange = function(data) {
  console.log('adapterState changed, now is', data.available)
}

bluetooth.startDevicesDiscovery(OBJECT)

開始搜尋附近的藍(lán)牙外圍設(shè)備。此操作比較耗費(fèi)系統(tǒng)資源,請?jiān)谒阉鞑⑦B接到設(shè)備后調(diào)用 bluetooth.stopDevicesDiscovery 方法停止搜索。

OBJECT 參數(shù):

參數(shù)名類型必填說明
servicesString[]要搜索的主 service 的 uuid 列表。某些藍(lán)牙設(shè)備會(huì)廣播自己的主 service 的 uuid。如果設(shè)置此參數(shù),則只搜索廣播包有對(duì)應(yīng) uuid 的主服務(wù)的藍(lán)牙設(shè)備。建議主要通過該參數(shù)過濾掉周邊不需要處理的其他藍(lán)牙設(shè)備。
allowDuplicatesKeyBoolean默認(rèn)值為 false。是否允許重復(fù)上報(bào)同一設(shè)備。如果允許重復(fù)上報(bào),則 bluetooth.ondevicefound 方法會(huì)多次上報(bào)同一設(shè)備,但是 RSSI 值會(huì)有不同。
intervalNumber單位毫秒,默認(rèn)值為 0。上報(bào)設(shè)備的間隔。0 表示找到新設(shè)備立即上報(bào),其他數(shù)值根據(jù)傳入的間隔上報(bào)。
successFunction成功回調(diào)。
failFunction失敗回調(diào)。
completeFunction執(zhí)行結(jié)束后的回調(diào)。

示例:

bluetooth.startDevicesDiscovery({
  services: ['FEE7'],
  success: function() {
    console.log('success')
  }
})

bluetooth.stopDevicesDiscovery(OBJECT)

停止搜尋附近的藍(lán)牙外圍設(shè)備。若已經(jīng)找到需要的藍(lán)牙設(shè)備并不需要繼續(xù)搜索時(shí),建議調(diào)用該接口停止藍(lán)牙搜索。

OBJECT 參數(shù):

參數(shù)名類型必填說明
successFunction成功回調(diào)。
failFunction失敗回調(diào)。
completeFunction執(zhí)行結(jié)束后的回調(diào)。

示例:

bluetooth.stopDevicesDiscovery({
  success: function() {
    console.log('success')
  },
  fail: function(data, code) {
    console.log(`handling fail, code = ${code}`)
  },
  complete: function() {
    console.log('complete')
  }
})

bluetooth.getDevices(OBJECT)

獲取在藍(lán)牙模塊生效期間所有已發(fā)現(xiàn)的藍(lán)牙設(shè)備。包括已經(jīng)和本機(jī)處于連接狀態(tài)的設(shè)備。

OBJECT 參數(shù):

參數(shù)名類型必填說明
successFunction成功回調(diào)。
failFunction失敗回調(diào)。
completeFunction執(zhí)行結(jié)束后的回調(diào)。
success 返回值:
參數(shù)名類型描述
devicesObject[]藍(lán)牙模塊生效期間已發(fā)現(xiàn)的藍(lán)牙設(shè)備
devices 返回值:
參數(shù)名類型說明
nameString藍(lán)牙設(shè)備名稱,某些設(shè)備可能沒有
deviceIdString用于區(qū)分設(shè)備的 id
RSSINumber當(dāng)前藍(lán)牙設(shè)備的信號(hào)強(qiáng)度
advertisDataArrayBuffer當(dāng)前藍(lán)牙設(shè)備的廣播數(shù)據(jù)段中的 ManufacturerData 數(shù)據(jù)段
advertisServiceUUIDsString[]當(dāng)前藍(lán)牙設(shè)備的廣播數(shù)據(jù)段中的 ServiceUUIDs 數(shù)據(jù)段
localNameString當(dāng)前藍(lán)牙設(shè)備的廣播數(shù)據(jù)段中的 LocalName 數(shù)據(jù)段
serviceDataObject當(dāng)前藍(lán)牙設(shè)備的廣播數(shù)據(jù)段中的 ServiceData 數(shù)據(jù)段,key 為 uuid 的 String 值,value 為對(duì)應(yīng)的 ServiceData 的 ArrayBuffer

示例:

function ab2hex(buffer) {
  var hexArr = Array.prototype.map.call(new Uint8Array(buffer), function(bit) {
    return ('00' + bit.toString(16)).slice(-2)
  })
  return hexArr.join('')
}
bluetooth.getDevices({
  success: function(data) {
    console.log('get device list has founded')
    data.devices.forEach(device => {
      console.log(`handling devive:${JSON.stringify(device)}`)
      console.log(`handling advertisData = ${ab2hex(device.advertisData)}`)
      for (let key in device.serviceData) {
        console.log(
          `handling serviceData: uuid = ${key}, serviceData = ${ab2hex(
            device.serviceData[key]
          )}`
        )
      }
    })
  },
  fail: function(data, code) {
    console.log(`handling fail, code = ${code}`)
  },
  complete: function() {
    console.log('complete')
  }
})

bluetooth.ondevicefound = function(data)

監(jiān)聽尋找到新設(shè)備的事件

data 返回值:

參數(shù)名類型描述
devicesObject[]新搜索到的設(shè)備列表,devices 返回值見 getDevices

示例:

function ab2hex(buffer) {
  var hexArr = Array.prototype.map.call(new Uint8Array(buffer), function(bit) {
    return ('00' + bit.toString(16)).slice(-2)
  })
  return hexArr.join('')
}
bluetooth.ondevicefound = function(data) {
  console.log('new device list has founded')
  data.devices.forEach(device => {
    console.log(`handling find new devive:${JSON.stringify(device)}`)
    console.log(`handling advertisData = ${ab2hex(device.advertisData)}`)

    for (let key in device.serviceData) {
      console.log(
        `handling serviceData: uuid = ${key}, serviceData = ${ab2hex(
          device.serviceData[key]
        )}`
      )
    }
  })
}

bluetooth.getConnectedDevices(OBJECT)

根據(jù) uuid 獲取處于已連接狀態(tài)的設(shè)備。

OBJECT 參數(shù):

參數(shù)名類型必填說明
successFunction成功回調(diào)。
failFunction失敗回調(diào)。
completeFunction執(zhí)行結(jié)束后的回調(diào)。
servicesString[]藍(lán)牙設(shè)備主 service 的 uuid 列表
success 返回值:
參數(shù)名類型描述
devicesObject[]uuid 對(duì)應(yīng)的的已連接設(shè)備列表
devices 返回值:
參數(shù)名類型說明
nameString藍(lán)牙設(shè)備名稱,某些設(shè)備可能沒有
deviceIdString用于區(qū)分設(shè)備的 id

示例:

bluetooth.getConnectedDevices({
  success: function(data) {
    console.log(data)
    if (data.devices[0]) {
      console.log(data.devices[0].name)
    }
  },
  fail: function(data, code) {
    console.log(`handling fail, code = ${code}`)
  },
  complete: function() {
    console.log('complete')
  }
})

bluetooth.createBLEConnection(OBJECT)

連接低功耗藍(lán)牙設(shè)備。若快應(yīng)用有搜索過某個(gè)藍(lán)牙設(shè)備,并成功建立連接,可直接傳入之前搜索獲取的 deviceId 直接嘗試連接該設(shè)備,無需進(jìn)行搜索操作。

OBJECT 參數(shù):

參數(shù)名類型必填說明
deviceIdString用于區(qū)分設(shè)備的 id
timeoutNumber超時(shí)時(shí)間,單位 ms,不填表示不會(huì)超時(shí)
successFunction成功回調(diào)。
failFunction失敗回調(diào)。
completeFunction執(zhí)行結(jié)束后的回調(diào)。

示例:

bluetooth.createBLEConnection({
  deviceId: deviceId,
  success: function() {
    console.log('success')
  },
  fail: function(data, code) {
    console.log(`handling fail, code = ${code}`)
  },
  complete: function() {
    console.log('complete')
  }
})

bluetooth.closeBLEConnection (OBJECT)

斷開與低功耗藍(lán)牙設(shè)備的連接。

OBJECT 參數(shù):

參數(shù)名類型必填說明
deviceIdString用于區(qū)分設(shè)備的 id
successFunction成功回調(diào)。
failFunction失敗回調(diào)。
completeFunction執(zhí)行結(jié)束后的回調(diào)。

示例:

bluetooth.closeBLEConnection({
  deviceId: deviceId,
  success: function() {
    console.log('success')
  },
  fail: function(data, code) {
    console.log(`handling fail, code = ${code}`)
  },
  complete: function() {
    console.log('complete')
  }
})

bluetooth.getBLEDeviceServices(OBJECT)

獲取藍(lán)牙設(shè)備所有服務(wù)(service)。

OBJECT 參數(shù):

參數(shù)名類型必填說明
deviceIdString藍(lán)牙設(shè)備 id
successFunction成功回調(diào)。
failFunction失敗回調(diào)。
completeFunction執(zhí)行結(jié)束后的回調(diào)。
success 返回值:
參數(shù)名類型描述
servicesObject[]設(shè)備服務(wù)列表
services 返回值:
參數(shù)名類型說明
uuidString藍(lán)牙設(shè)備服務(wù)的 uuid
isPrimaryBoolean該服務(wù)是否為主服務(wù)

示例:

bluetooth.getBLEDeviceServices({
  deviceId: deviceId,
  success: function(data) {
    data.services.forEach(service => {
      console.log(
        `handling device services: uuid = ${service.uuid}, isPrimary = ${
          service.isPrimary
        }`
      )
    })
  },
  fail: function(data, code) {
    console.log(`handling fail, code = ${code}`)
  },
  complete: function() {
    console.log('complete')
  }
})

bluetooth.getBLEDeviceCharacteristics(OBJECT)

獲取藍(lán)牙設(shè)備某個(gè)服務(wù)中所有特征值(characteristic)。

OBJECT 參數(shù):

參數(shù)名類型必填說明
successFunction成功回調(diào)。
failFunction失敗回調(diào)。
completeFunction執(zhí)行結(jié)束后的回調(diào)。
deviceIdString藍(lán)牙設(shè)備 id
serviceIdString藍(lán)牙服務(wù) uuid,需要使用 getBLEDeviceServices 獲取
success 返回值:
參數(shù)名類型描述
characteristicsObject[]設(shè)備服務(wù)列表
characteristics 返回值:
參數(shù)名類型說明
uuidString藍(lán)牙設(shè)備特征值的 uuid
propertiesObject該特征值支持的操作類型
properties 返回值:
參數(shù)名類型說明
readBoolean該特征值是否支持 read 操作
writeBoolean該特征值是否支持 write 操作
notifyBoolean該特征值是否支持 notify 操作
indicateBoolean該特征值是否支持 indicate 操作

示例:

bluetooth.getBLEDeviceCharacteristics({
  deviceId: deviceId,
  serviceId: serviceId,
  success: function(data) {
    data.characteristics.forEach(characteristic => {
      console.log(
        `handling device characteristic : uuid = ${
          characteristic.uuid
        }, can read = ${characteristic.properties.read}`
      )
    })
  },
  fail: function(data, code) {
    console.log(`handling fail, code = ${code}`)
  },
  complete: function() {
    console.log('complete')
  }
})

bluetooth.readBLECharacteristicValue(OBJECT)

讀取低功耗藍(lán)牙設(shè)備的特征值的二進(jìn)制數(shù)據(jù)值。注意:必須設(shè)備的特征值支持 read 才可以成功調(diào)用。

OBJECT 參數(shù):

參數(shù)名類型必填說明
deviceIdString藍(lán)牙設(shè)備 id
serviceIdString藍(lán)牙特征值對(duì)應(yīng)服務(wù)的 uuid
characteristicIdString藍(lán)牙特征值的 uuid
successFunction成功回調(diào)。
failFunction失敗回調(diào)。
completeFunction執(zhí)行結(jié)束后的回調(diào)。

示例:

bluetooth.readBLECharacteristicValue({
  // 這里的 deviceId 需要已經(jīng)通過 createBLEConnection 與對(duì)應(yīng)設(shè)備建立鏈接
  deviceId: deviceId,
  // 這里的 serviceId 需要在 getBLEDeviceServices 接口中獲取
  serviceId: serviceId,
  // 這里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中獲取
  characteristicId: characteristicId,
  success: function() {
    // 執(zhí)行操作成功,讀取的值會(huì)在onblecharacteristicvaluechange 接口中上報(bào)
    console.log('success')
  }
})

bluetooth.writeBLECharacteristicValue(OBJECT)

向低功耗藍(lán)牙設(shè)備特征值中寫入二進(jìn)制數(shù)據(jù)。注意:必須設(shè)備的特征值支持 write 才可以成功調(diào)用。

OBJECT 參數(shù):

參數(shù)名類型必填說明
deviceIdString藍(lán)牙設(shè)備 id
serviceIdString藍(lán)牙特征值對(duì)應(yīng)服務(wù)的 uuid
characteristicIdString藍(lán)牙特征值的 uuid
valueArrayBuffer藍(lán)牙設(shè)備特征值對(duì)應(yīng)的二進(jìn)制值
successFunction成功回調(diào)。
failFunction失敗回調(diào)。
completeFunction執(zhí)行結(jié)束后的回調(diào)。

示例:

bluetooth.writeBLECharacteristicValue({
  // 這里的 deviceId 需要在 getBluetoothDevices 或 onBluetoothDeviceFound接口中獲取
  deviceId: deviceId,
  // 這里的 serviceId 需要在 getBLEDeviceServices 接口中獲取
  serviceId: serviceId,
  // 這里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中獲取
  characteristicId: characteristicId,
  // 這里的value是ArrayBuffer類型
  value: buffer,
  success: function() {
    console.log('success')
  },
  fail: function(data, code) {
    console.log(`handling fail, code = ${code}`)
  },
  complete: function() {
    console.log('complete')
  }
})

bluetooth.notifyBLECharacteristicValueChange(OBJECT)

啟用低功耗藍(lán)牙設(shè)備特征值變化時(shí)的 notify 功能,訂閱特征值。注意:必須設(shè)備的特征值支持 notify 或者 indicate 才可以成功調(diào)用。另外,必須先啟用 notifyBLECharacteristicValueChange 才能監(jiān)聽到設(shè)備 characteristicValueChange 事件

OBJECT 參數(shù):

參數(shù)名類型必填說明
deviceIdString藍(lán)牙設(shè)備 id
serviceIdString藍(lán)牙特征值對(duì)應(yīng)服務(wù)的 uuid
characteristicIdString藍(lán)牙特征值的 uuid
stateBoolean是否啟用 notify
successFunction成功回調(diào)。
failFunction失敗回調(diào)。
completeFunction執(zhí)行結(jié)束后的回調(diào)。

示例:

bluetooth.notifyBLECharacteristicValueChange({
  // 啟用 notify 功能
  state: true,
  // 這里的 deviceId 需要已經(jīng)通過 createBLEConnection 與對(duì)應(yīng)設(shè)備建立鏈接
  deviceId: deviceId,
  // 這里的 serviceId 需要在 getBLEDeviceServices 接口中獲取
  serviceId: serviceId,
  // 這里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中獲取
  characteristicId: characteristicId,
  success: function() {
    console.log('success')
  },
  fail: function(data, code) {
    console.log(`handling fail, code = ${code}`)
  },
  complete: function() {
    console.log('complete')
  }
})

bluetooth.onblecharacteristicvaluechange = function(data)

監(jiān)聽低功耗藍(lán)牙設(shè)備的特征值變化。必須先啟用 notifyBLECharacteristicValueChange 接口才能接收到設(shè)備推送的 notification。

data 返回值:

參數(shù)名類型描述
deviceIdString藍(lán)牙設(shè)備 id
serviceIdString藍(lán)牙特征值對(duì)應(yīng)服務(wù)的 uuid
characteristicIdString藍(lán)牙特征值的 uuid
valueArrayBuffer特征值最新的值

示例:

function ab2hex(buffer) {
  var hexArr = Array.prototype.map.call(new Uint8Array(buffer), function(bit) {
    return ('00' + bit.toString(16)).slice(-2)
  })
  return hexArr.join('')
}
bluetooth.onblecharacteristicvaluechange = function(data) {
  console.log(
    `handling characteristic value change: deviceId = ${
      data.deviceId
    }, serviceId = ${data.serviceId}, characteristicId = ${
      data.characteristicId
    }, value = ${ab2hex(data.value)}`
  )
}

bluetooth.onbleconnectionstatechange = function(data)

監(jiān)聽低功耗藍(lán)牙連接狀態(tài)的改變事件。包括開發(fā)者主動(dòng)連接或斷開連接,設(shè)備丟失,連接異常斷開等等

data 返回值:

參數(shù)名類型描述
deviceIdString藍(lán)牙設(shè)備 id
connectedBoolean是否處于已連接狀態(tài)

示例:

bluetooth.onbleconnectionstatechange = function(data) {
  console.log(
    `handling device state change: deviceId = ${data.deviceId}, connected = ${
      data.connected
    }`
  )
}

狀態(tài)碼

錯(cuò)誤碼錯(cuò)誤信息描述
0ok正常
10000not init未初始化藍(lán)牙適配器
10001not available當(dāng)前系統(tǒng)藍(lán)牙未打開
10002no device沒有找到指定設(shè)備
10003connection fail連接失敗
10004no service沒有找到指定服務(wù)
10005no characteristic沒有找到指定特征值
10006no connection當(dāng)前連接已斷開
10007property not support當(dāng)前特征值不支持此操作
10008system error其余所有系統(tǒng)上報(bào)的異常
10009system not support系統(tǒng)版本低于 4.3 不支持 BLE
10010 1060+location not turned on定位開關(guān)未打開

后臺(tái)運(yùn)行限制

禁止使用。后臺(tái)運(yùn)行詳細(xì)用法參見 后臺(tái)運(yùn)行腳本


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)