腾讯会议蓝牙_办公协同解决方案

功能描述

使用场景

业务方需要扫描连接蓝牙耳机、音响等设备。

整体流程

初始化蓝牙设备。扫描发现外围设备。连接设备。获取外围设备提供的服务。获取服务的特征 characteristics。读写服务的特征值。断开蓝牙连接、关闭蓝牙适配器。注意腾讯会议 Android 端从3.14版本开始支持蓝牙相关能力,IOS 端暂不支持。扫描发现外围设备后,需要停止扫描(扫描设备比较耗费系统资源,请在搜索到需要的设备后及时调用)。

初始化蓝牙设备

JSAPI 接口

openBluetoothAdapter(): Promise

代码示例

// 初始化蓝牙设备wemeet.bluetooth.openBluetoothAdapter()  .then(() => {    console.log('openBluetoothAdapter seccuss');    // 蓝牙设备初始化成功  })  .catch(err => {    console.error('openBluetoothAdapter failed');  });

扫描发现外围设备

JSAPI 接口

startBluetoothDevicesDiscovery(param?: BluetoothDevicesDiscoveryParam): Promise
interface BluetoothDevicesDiscoveryParam { /** * 期望搜索到的蓝牙设备id */ deviceId?: string; /** * 单位ms,非必填;默认为3000ms * 因为扫描十分耗费系统资源,开启scan以后,会在执行完扫描周期(或发现目标设备)后自动结束扫描 */ period?: number;} /** * BLE扫描完成的回调事件返回类型 */export interface BluetoothDeviceDiscoveryEventData { /** * 蓝牙设备列表 */ devices: BluetoothDeviceItem[];}
/** * 蓝牙设备信息 */export interface BluetoothDeviceItem { /** * 蓝牙设备id */ deviceId: string; /** * 蓝牙名称 */ name: string; /** * 前蓝牙设备广播数据段中的ManufacturerData数据段 * @support ANDROID >= 3.17.0 */ advertiseData?: string[]; /** * 蓝牙设备广播数据段中的LocalName数据段 * @support ANDROID >= 3.17.0 */ localName?: string; /** * 蓝牙信号强度(单位dBm) * @support ANDROID >= 3.17.0 */ rssi?: number; /** * 蓝牙设备是否可连接(Android 8.0以下不支持该属性) * @support ANDROID >= 3.17.0 */ connectable?: boolean;}

代码示例

场景1:全局扫描
const bluetoothDeviceDiscoveryHandler = (resp) => {  // 蓝牙设备列表  const { devices } = resp;
const targetDevice = devices[0]; // 假设第一个就是目标设备 const { deviceId } = targetDevice;// 获取到设备的deviceId
// 扫描到目标设备后,请结束扫描任务 wemeet.bluetooth.stopBluetoothDevicesDiscovery();});
// 蓝牙扫描完成的回调wemeet.addEventListener('bluetooth-device-discovery', bluetoothDeviceDiscoveryHandler);
wemeet.bluetooth.startBluetoothDevicesDiscovery({ period: 3000, // 扫描周期 单位ms 非必填 默认为3000ms}) .then(() => { console.log('startBluetoothDevicesDiscovery seccuss'); }) .catch(err => { console.error('startBluetoothDevicesDiscovery failed'); });
场景2:指定特定的设备进行扫描
const bluetoothDeviceDiscoveryHandler = (resp) => {  // 蓝牙设备列表  const { devices } = resp;
const targetDevice = devices[0]; // 第一个就是目标设备 const { deviceId } = targetDevice;// 获取到设备的deviceId
// 扫描到目标设备后,请结束扫描任务 wemeet.bluetooth.stopBluetoothDevicesDiscovery();});
// 蓝牙扫描完成的回调wemeet.addEventListener('bluetooth-device-discovery', bluetoothDeviceDiscoveryHandler);
wemeet.bluetooth.startBluetoothDevicesDiscovery({ deviceId: 'xxxxx', // 期望搜索到的蓝牙设备id period: 5000, // 扫描周期 单位ms 非必填 默认为3000ms}) .then(() => { console.log('startBluetoothDevicesDiscovery seccuss'); }) .catch(err => { console.error('startBluetoothDevicesDiscovery failed'); });

连接蓝牙设备

JSAPI 接口

createBLEConnection(options: BLEConnectionParam): Promise
interface BLEConnectionParam { /** * 需要连接的BLE设备id */ deviceId: string;}

代码示例

wemeet.bluetooth.createBLEConnection({    deviceId: 'xxxxxxxxxx',})    .then(() => {        // 连接的ble设备提成功    })    .catch(error => {        console.error('createBLEConnection failed', error);    });

获取外围设备提供的服务

JSAPI 接口

getBLEDeviceServices(param: BLEDeviceServicesParam): Promise
interface BLEDeviceServicesParam { /** * 需要连接的BLE设备id */ deviceId: string;}
interface BLEDeviceServicesResp { /** * 连接的ble设备提供的所有service */ services: BLEServiceItem[];}

/** * ble设备提供的service */export interface BLEServiceItem { /** * service的uuid */ serviceId: string; /** * 服务的类型 * 0表示主服务,1表示非主服务 */ type: BLEServiceType;}

代码示例

wemeet.bluetooth.getBLEDeviceServices({    deviceId: 'xxxxxxxxxx',})    .then((resp) => {        // 连接的ble设备提供的所有service        const { services } = resp;        // 假设目标service 是第一个;        const targetService = services[0];        // service的uuid        const { serviceId, type } = targetService;    })    .catch(error => {        console.error('getBLEDeviceServices failed', error);    });

获取服务的特征 characteristics

JSAPI 接口

getBLEDeviceCharacteristics(param: BLEDeviceCharacteristicsParam): Promise
interface BLEDeviceCharacteristicsParam { /** * 需要连接的BLE设备id */ deviceId: string; /** * service的uuid */ serviceId: string;}
interface BLEDeviceCharacteristicsResp { /** * 所支持的characteristic列表 */ characteristics: BLECharacteristicItem[];}

/** * ble设备提供的characteristic */export interface BLECharacteristicItem { /** * characteristic的uuid */ characteristicId: string; /** * 特征支持的属性,返回特征支持的属性列表 */ property: BLECharacteristicProperty[];}
/** * BLE设备的特征属性 */export enum BLECharacteristicProperty { /** * 广播特征 */ PROPERTY_BROADCAST = 1, /** * 其他特征 */ PROPERTY_EXTENDED_PROPS = 128, /** * 支持indicate的特征 */ PROPERTY_INDICATE = 32, /** * 支持notify的特征 */ PROPERTY_NOTIFY = 16, /** * 支持读的特征 */ PROPERTY_READ = 2, /** * 支持带签名写的特征 */ PROPERTY_SIGNED_WRITE = 64, /** * 支持写的特征 */ PROPERTY_WRITE = 8, /** * 支持无回调写的特征 */ PROPERTY_WRITE_NO_RESPONSE = 4,}

代码示例

wemeet.bluetooth.getBLEDeviceCharacteristics({    deviceId: 'xxxxxxxxxx',    serviceId: 'xxxxxxxxx',})    .then((resp) => {        // 连接的ble设备提供的某个服务中所有特征        const { characteristics } = resp;        // 假设目标characteristic 是第一个;        const targetCharacteristic = characteristics[0];        // service的uuid        const {            characteristicId, // 蓝牙设备特征的 UUID            property, // 该特征支持的操作类型        } = targetCharacteristic;    })    .catch(error => {        console.error('getCharacteristics failed', error);    });

读写服务的特征值

JSAPI 接口

// 向蓝牙低功耗设备特征值中写入二进制数据writeBLECharacteristicValue(param: BLECharacteristicWriteParam): Promise
interface BLECharacteristicWriteParam { /** * service的uuid */ serviceId: string; /** * characteristic的uuid */ characteristicId: string; /** * 需要写入ble设备的特征值 */ value: string;}

// 向蓝牙低功耗设备特征值中写入数据readBLECharacteristicValue(param: BLECharacteristicReadParam): Promise
interface BLECharacteristicReadParam { /** * service的uuid */ serviceId: string; /** * characteristic的uuid */ characteristicId: string;}

// 设置蓝牙低功耗设备特征值变化时的 notify 功能,订阅特征setBLECharacteristicValueChangeNotify(param: BLECharacteristicsChangeNotifyParam): Promise
interface BLECharacteristicsChangeNotifyParam { /** * service的uuid */ serviceId: string; /** * characteristic的uuid */ characteristicId: string; /** * characteristic的descriptor属性的uuid */ descriptorId: string; /** * 是否开启notify */ enable: boolean;}

代码示例

// 向蓝牙低功耗设备特征值中写入数据wemeet.bluetooth.writeBLECharacteristicValue({  serviceId: 'xxxxx',  characteristicId: 'xxxxx',  value: 'xxxxx',})  .then(() => {    console.log('writeBLECharacteristicValue success');  })  .catch(err => {    console.error('writeBLECharacteristicValue failed', err);  });

// 读取蓝牙低功耗设备特征值的二进制数据const bleCharacterHandler = (resp) => { console.log('bleCharacterValue changed', resp);};// 需要监听'ble-characteristic-value-change'获取真正的数据wemeet.addEventListener('ble-characteristic-value-change', bleCharacterHandler);
wemeet.bluetooth.readBLECharacteristicValue({ serviceId: 'xxxxx', characteristicId: 'xxxxx',}) .then(() => { console.log('readBLECharacteristicValue success'); // 真正的数据在ble-characteristic-value-change事件中获取 }) .catch(err => { console.error('readBLECharacteristicValue failed', err); });

// 设置蓝牙低功耗设备特征值变化时的 notify 功能,订阅特征wemeet.bluetooth.setBLECharacteristicValueChangeNotify({ serviceId: 'xxxxxxxxxx', characteristicId: 'xxxxxxxxx',
// 表示ble设备供读取数据的characteristic的descriptor属性的uuid descriptorId: 'xxxxxxxxxxxxx', enable: true, // 是否开启notify}) .catch(error => { console.error('setBLECharacteristicValueChangeNotify failed', error); });
const bleCharaValueChangeHandler = (resp) => { const { characteristicId, // 蓝牙特征的 UUID value, // ble设备通知中心设备发生变化的特征值 } = resp; console.log(`characteristic ${characteristicId} changed with: ${value}`);};
// 监听BLE特征值变化事件wemeet.addEventListener('ble-characteristic-value-change', bleCharaValueChangeHandler);

断开蓝牙连接、关闭蓝牙适配器

JSAPI 接口

closeBluetoothAdapter(): PromisecloseBLEConnection(): PromisestopBluetoothDevicesDiscovery(): Promise

代码示例

wemeet.bluetooth.closeBLEConnection();wemeet.bluetooth.closeBluetoothAdapter();

其他事件

// 监听蓝牙低功耗连接状态改变事件// 包括开发者主动连接或断开连接,设备丢失,连接异常断开等等wemeet.addEventListener('bluetooth-connection-state', (resp) => {    const {     deviceId, // 蓝牙设备id     connected, // 是否处于已连接状态    } = resp;});
// 监听蓝牙适配器状态变化事件wemeet.addEventListener('bluetooth-adapter-state-change', (resp) => { const { available, // 蓝牙适配器是否可用 } = resp;});


错误码

/** * 蓝牙通用错误码 */export enum BluetoothError {  /**   * 正常   */  OK = 0,  /**   * 已连接   */  CONNECTED = -1,  /**   * 蓝牙适配器初始化失败   */  ADAPTER_NOT_INIT = 10000,  /**   * 当前蓝牙适配器不可用,一般为蓝牙未启动   */  ADAPTER_NOT_AVAILABLE = 10001,  /**   * 没有找到指定设备   */  DEVICE_NOT_FOUND = 10002,  /**   * 连接失败   */  CONNECTION_FAIL = 10003,  /**   * 没有找到指定服务   */  NO_SERVICE = 10004,  /**   * 没有找到指定特征   */  NO_CHARACTERISTIC = 10005,  /**   * 当前连接已断开   */  NO_CONNECTION = 10006,  /**   * 当前characteristic不支持此操作   */  PROPERTY_NOT_SUPPORT = 10007,  /**   * 系统异常   */  SYSTEM_ERROR = 10008,  /**   * 系统不支持,例如Android版本低于3.4不支持BLE   */  SYSTEM_NOT_SUPPORT = 10009,  /**   * 操作超时,如扫描超时未发现设备   */  OPERATE_TIME_OUT = 10012,  /**   * 操作超时,如扫描超时未发现设备   */  INVALID_DATA = 10013,}



对腾讯办公协同的解决方案有疑惑?想了解解决方案收费? 联系解决方案专家

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心,购买腾讯云享受折上折,更有现金返利:同意关联,立享优惠

阿里云解决方案也看看?: 点击对比阿里云的解决方案