@ohos.bluetooth.ble (蓝牙ble模块)

本模块提供了基于低功耗蓝牙(Bluetooth Low Energy,BLE)技术的蓝牙能力,支持发起BLE扫描、发送BLE广播报文、以及基于通用属性协议(Generic Attribute Profile,GATT)的连接和传输数据。

说明:

  • 本模块首批接口从API version 10开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
  • 接口中涉及的UUID服务,可以通过工具函数util.generateRandomUUID生成。

导入模块

import { ble } from '@kit.ConnectivityKit';

ProfileConnectionState10+

type ProfileConnectionState = constant.ProfileConnectionState

蓝牙设备的Profile协议连接状态。

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

类型 说明
constant.ProfileConnectionState 蓝牙设备的profile连接状态。

ble.createGattServer

createGattServer(): GattServer

创建GattServer实例,表示GATT连接中的server端。

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

返回值:

类型 说明
GattServer 返回一个Gatt服务的实例。

示例:

let gattServer: ble.GattServer = ble.createGattServer();
console.info('gatt success');

ble.createGattClientDevice

createGattClientDevice(deviceId: string): GattClientDevice

创建GattClientDevice实例,表示GATT连接中的client端。

  • 通过该实例可以操作client端行为,如调用connect向对端设备发起连接,调用getServices获取对端设备支持的所有服务能力。
  • 创建该实例所需要的设备地址表示server端设备。可以通过ble.startBLEScanBleScannerstartScan接口获取server端设备地址,且需保证server端设备的BLE广播是可连接的。

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
deviceId string 对端设备地址, 例如:"XX:XX:XX:XX:XX:XX"。

返回值:

类型 说明
GattClientDevice client端类,使用client端方法之前需要创建该类的实例进行操作。

错误码

以下错误码的详细介绍请参见通用错误码说明文档

错误码ID 错误信息
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
try {
    let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

ble.getConnectedBLEDevices

getConnectedBLEDevices(): Array<string>

获取和本机设备已连接GATT的BLE设备集合。

  • 建议给server端使用,client端使用返回的设备地址集合为空。

需要权限:ohos.permission.ACCESS_BLUETOOTH

系统能力:SystemCapability.Communication.Bluetooth.Core

返回值:

类型 说明
Array<string> 返回和本机设备已建立GATT连接的BLE设备地址集合。
基于信息安全考虑,此处获取的设备地址为虚拟MAC地址。
- 若和该设备地址配对成功后,该地址不会变更。
- 取消配对该设备或蓝牙关闭后,若重新获取,该虚拟地址会变更。
- 若要持久化保存该地址,可使用access.addPersistentDeviceId方法

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
try {
    let result: Array<string> = ble.getConnectedBLEDevices();
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

ble.startBLEScan

startBLEScan(filters: Array<ScanFilter>, options?: ScanOptions): void

发起BLE扫描流程。

  • 扫描结果会通过ble.on('BLEDeviceFind')的回调函数获取到。只能扫描BLE设备,调用ble.stopBLEScan可以停止该方法开启的扫描流程。
  • 该接口只支持单路扫描,即应用同时只能调用一次,下一次调用前,需要先调用ble.stopBLEScan停止上一次的扫描流程。
  • 若需要使用多路扫描,可使用BleScanner

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
filters Array<ScanFilter> 表示扫描结果过滤策略集合,符合过滤条件的设备发现会保留。
-若该参数设置为null,将扫描所有可发现的周边BLE设备,但是不建议使用此方式,可能扫描到非预期设备,并增加功耗。
options ScanOptions 表示扫描的参数配置。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
function onReceiveEvent(data: Array<ble.ScanResult>) {
    console.info('BLE scan device find result = '+ JSON.stringify(data));
}
try {
    ble.on("BLEDeviceFind", onReceiveEvent);
    let scanFilter: ble.ScanFilter = {
            deviceId:"XX:XX:XX:XX:XX:XX",
            name:"test",
            serviceUuid:"00001888-0000-1000-8000-00805f9b34fb"
        };
    let scanOptions: ble.ScanOptions = {
    interval: 500,
    dutyMode: ble.ScanDuty.SCAN_MODE_LOW_POWER,
    matchMode: ble.MatchMode.MATCH_MODE_AGGRESSIVE
    }
    ble.startBLEScan([scanFilter],scanOptions);
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

ble.stopBLEScan

stopBLEScan(): void

停止BLE扫描流程。

  • 停止的BLE扫描由ble.startBLEScan触发。
  • 当应用不再需要扫描BLE设备时,需主动调用该方法停止扫描。
  • 调用此接口后将不再收到扫描结果上报,重新开启BLE扫描即可再次扫到BLE设备。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
try {
    ble.stopBLEScan();
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

ble.startAdvertising

startAdvertising(setting: AdvertiseSetting, advData: AdvertiseData, advResponse?: AdvertiseData): void

开始发送BLE广播报文。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
setting AdvertiseSetting BLE广播的相关参数。
advData AdvertiseData BLE广播报文内容。
advResponse AdvertiseData BLE扫描回复广播报文。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let manufactureValueBuffer = new Uint8Array(4);
manufactureValueBuffer[0] = 1;
manufactureValueBuffer[1] = 2;
manufactureValueBuffer[2] = 3;
manufactureValueBuffer[3] = 4;

let serviceValueBuffer = new Uint8Array(4);
serviceValueBuffer[0] = 4;
serviceValueBuffer[1] = 6;
serviceValueBuffer[2] = 7;
serviceValueBuffer[3] = 8;
console.info('manufactureValueBuffer = '+ JSON.stringify(manufactureValueBuffer));
console.info('serviceValueBuffer = '+ JSON.stringify(serviceValueBuffer));
try {
    let setting: ble.AdvertiseSetting = {
        interval:150,
        txPower:0,
        connectable:true
    };
    let manufactureDataUnit: ble.ManufactureData = {
        manufactureId:4567,
        manufactureValue:manufactureValueBuffer.buffer
    };
    let serviceDataUnit: ble.ServiceData = {
        serviceUuid:"00001888-0000-1000-8000-00805f9b34fb",
        serviceValue:serviceValueBuffer.buffer
    };
    let advData: ble.AdvertiseData = {
        serviceUuids:["00001888-0000-1000-8000-00805f9b34fb"],
        manufactureData:[manufactureDataUnit],
        serviceData:[serviceDataUnit]
    };
    let advResponse: ble.AdvertiseData = {
        serviceUuids:["00001888-0000-1000-8000-00805f9b34fb"],
        manufactureData:[manufactureDataUnit],
        serviceData:[serviceDataUnit]
    };
    ble.startAdvertising(setting, advData ,advResponse);
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

ble.stopAdvertising

stopAdvertising(): void

停止发送BLE广播报文。

  • 停止的BLE广播是由ble.startAdvertising触发的。
  • 不可以和API version 11的ble.startAdvertising搭配使用。
  • 当应用不再需要发送BLE广播报文时,需主动调用该方法停止发送。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
try {
    ble.stopAdvertising();
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

ble.startAdvertising11+

startAdvertising(advertisingParams: AdvertisingParams, callback: AsyncCallback<number>): void

首次启动发送BLE广播报文。使用Callback异步回调。

  • 启动成功后,蓝牙子系统会分配相关资源,并使用Callback异步返回该广播的标识。
  • 若携带了发送广播持续时间,则一定时间后,广播会停止发送,但分配的广播资源还存在,可以通过ble.enableAdvertising重新启动发送该广播。
  • 从API version 15开始,应用可多次调用,支持发起多路广播,每一路广播通过不同的ID标识管理。
  • 当应用不再需要该广播时,需调用API version 11开始支持的ble.stopAdvertising完全停止该广播,不要与API version 10开始支持的ble.stopAdvertising混用。
  • 通过ble.on('advertisingStateChange')回调获取首次启动广播结果。

需要权限:ohos.permission.ACCESS_BLUETOOTH

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
advertisingParams AdvertisingParams 启动BLE广播的相关参数。
callback AsyncCallback<number> 广播ID标识,通过注册回调函数获取。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let manufactureValueBuffer = new Uint8Array(4);
manufactureValueBuffer[0] = 1;
manufactureValueBuffer[1] = 2;
manufactureValueBuffer[2] = 3;
manufactureValueBuffer[3] = 4;

let serviceValueBuffer = new Uint8Array(4);
serviceValueBuffer[0] = 4;
serviceValueBuffer[1] = 6;
serviceValueBuffer[2] = 7;
serviceValueBuffer[3] = 8;
console.info('manufactureValueBuffer = '+ JSON.stringify(manufactureValueBuffer));
console.info('serviceValueBuffer = '+ JSON.stringify(serviceValueBuffer));
try {
    let setting: ble.AdvertiseSetting = {
        interval:150,
        txPower:0,
        connectable:true,
    };
    let manufactureDataUnit: ble.ManufactureData = {
        manufactureId:4567,
        manufactureValue:manufactureValueBuffer.buffer
    };
    let serviceDataUnit: ble.ServiceData = {
        serviceUuid:"00001888-0000-1000-8000-00805f9b34fb",
        serviceValue:serviceValueBuffer.buffer
    };
    let advData: ble.AdvertiseData = {
        serviceUuids:["00001888-0000-1000-8000-00805f9b34fb"],
        manufactureData:[manufactureDataUnit],
        serviceData:[serviceDataUnit]
    };
    let advResponse: ble.AdvertiseData = {
        serviceUuids:["00001888-0000-1000-8000-00805f9b34fb"],
        manufactureData:[manufactureDataUnit],
        serviceData:[serviceDataUnit]
    };
    let advertisingParams: ble.AdvertisingParams = {
        advertisingSettings: setting,
        advertisingData: advData,
        advertisingResponse: advResponse,
        duration: 0
    }
    let advHandle = 0xFF;
    ble.startAdvertising(advertisingParams, (err, outAdvHandle) => {
        if (err) {
            return;
        } else {
            advHandle = outAdvHandle;
            console.info("advHandle: " + advHandle);
        }
    });
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

ble.startAdvertising11+

startAdvertising(advertisingParams: AdvertisingParams): Promise<number>

首次启动发送BLE广播报文。使用Promise异步回调。

  • 启动成功后,蓝牙子系统会分配相关资源,并使用Promise异步返回该广播的标识。
  • 若携带了发送广播持续时间,则一定时间后,广播会停止发送,但分配的广播资源还存在,可以通过ble.enableAdvertising重新启动发送该广播。
  • 从API version 15开始,应用可多次调用,支持发起多路广播,每一路广播通过不同的ID标识管理。
  • 当应用不再需要该广播时,需调用API version 11开始支持的ble.stopAdvertising完全停止该广播,不要与API version 10开始支持的ble.stopAdvertising混用。
  • 通过ble.on('advertisingStateChange')回调获取首次启动广播结果。

需要权限:ohos.permission.ACCESS_BLUETOOTH

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
advertisingParams AdvertisingParams 启动BLE广播的相关参数。

返回值:

类型 说明
Promise<number> 广播ID标识,通过promise形式获取。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let manufactureValueBuffer = new Uint8Array(4);
manufactureValueBuffer[0] = 1;
manufactureValueBuffer[1] = 2;
manufactureValueBuffer[2] = 3;
manufactureValueBuffer[3] = 4;

let serviceValueBuffer = new Uint8Array(4);
serviceValueBuffer[0] = 4;
serviceValueBuffer[1] = 6;
serviceValueBuffer[2] = 7;
serviceValueBuffer[3] = 8;
console.info('manufactureValueBuffer = '+ JSON.stringify(manufactureValueBuffer));
console.info('serviceValueBuffer = '+ JSON.stringify(serviceValueBuffer));
try {
    let setting: ble.AdvertiseSetting = {
        interval:150,
        txPower:0,
        connectable:true
    };
    let manufactureDataUnit: ble.ManufactureData = {
        manufactureId:4567,
        manufactureValue:manufactureValueBuffer.buffer
    };
    let serviceDataUnit: ble.ServiceData = {
        serviceUuid:"00001888-0000-1000-8000-00805f9b34fb",
        serviceValue:serviceValueBuffer.buffer
    };
    let advData: ble.AdvertiseData = {
        serviceUuids:["00001888-0000-1000-8000-00805f9b34fb"],
        manufactureData:[manufactureDataUnit],
        serviceData:[serviceDataUnit]
    };
    let advResponse: ble.AdvertiseData = {
        serviceUuids:["00001888-0000-1000-8000-00805f9b34fb"],
        manufactureData:[manufactureDataUnit],
        serviceData:[serviceDataUnit]
    };
    let advertisingParams: ble.AdvertisingParams = {
        advertisingSettings: setting,
        advertisingData: advData,
        advertisingResponse: advResponse,
        duration: 0
    }
    let advHandle = 0xFF;
    ble.startAdvertising(advertisingParams)
        .then(outAdvHandle => {
            advHandle = outAdvHandle;
    });
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

ble.enableAdvertising11+

enableAdvertising(advertisingEnableParams: AdvertisingEnableParams, callback: AsyncCallback<void>): void

重新启动指定标识的BLE广播。使用Callback异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
advertisingEnableParams AdvertisingEnableParams 临时启动BLE广播的相关参数。
callback AsyncCallback<void> 回调函数。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let manufactureValueBuffer = new Uint8Array(4);
manufactureValueBuffer[0] = 1;
manufactureValueBuffer[1] = 2;
manufactureValueBuffer[2] = 3;
manufactureValueBuffer[3] = 4;

let serviceValueBuffer = new Uint8Array(4);
serviceValueBuffer[0] = 4;
serviceValueBuffer[1] = 6;
serviceValueBuffer[2] = 7;
serviceValueBuffer[3] = 8;
console.info('manufactureValueBuffer = '+ JSON.stringify(manufactureValueBuffer));
console.info('serviceValueBuffer = '+ JSON.stringify(serviceValueBuffer));
try {
    let setting: ble.AdvertiseSetting = {
        interval:150,
        txPower:0,
        connectable:true
    };
    let manufactureDataUnit: ble.ManufactureData = {
        manufactureId:4567,
        manufactureValue:manufactureValueBuffer.buffer
    };
    let serviceDataUnit: ble.ServiceData = {
        serviceUuid:"00001888-0000-1000-8000-00805f9b34fb",
        serviceValue:serviceValueBuffer.buffer
    };
    let advData: ble.AdvertiseData = {
        serviceUuids:["00001888-0000-1000-8000-00805f9b34fb"],
        manufactureData:[manufactureDataUnit],
        serviceData:[serviceDataUnit]
    };
    let advResponse: ble.AdvertiseData = {
        serviceUuids:["00001888-0000-1000-8000-00805f9b34fb"],
        manufactureData:[manufactureDataUnit],
        serviceData:[serviceDataUnit]
    };
    let advertisingParams: ble.AdvertisingParams = {
        advertisingSettings: setting,
        advertisingData: advData,
        advertisingResponse: advResponse,
        duration: 300
    }
    let advHandle = 0xFF;
    ble.startAdvertising(advertisingParams, (err, outAdvHandle) => {
        if (err) {
            return;
        } else {
            advHandle = outAdvHandle;
            console.info("advHandle: " + advHandle);
        }
    });

    let advertisingEnableParams: ble.AdvertisingEnableParams = {
        advertisingId: advHandle,
        duration: 0
    }

    // after 3s, advertising disabled, then enable the advertising
    ble.enableAdvertising(advertisingEnableParams, (err) => {
        if (err) {
            return;
        }
    });
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

ble.enableAdvertising11+

enableAdvertising(advertisingEnableParams: AdvertisingEnableParams): Promise<void>

重新启动指定标识的BLE广播。使用Promise异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
advertisingEnableParams AdvertisingEnableParams 临时启动BLE广播的相关参数。

返回值:

类型 说明
Promise<void> 回调函数。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let manufactureValueBuffer = new Uint8Array(4);
manufactureValueBuffer[0] = 1;
manufactureValueBuffer[1] = 2;
manufactureValueBuffer[2] = 3;
manufactureValueBuffer[3] = 4;

let serviceValueBuffer = new Uint8Array(4);
serviceValueBuffer[0] = 4;
serviceValueBuffer[1] = 6;
serviceValueBuffer[2] = 7;
serviceValueBuffer[3] = 8;
console.info('manufactureValueBuffer = '+ JSON.stringify(manufactureValueBuffer));
console.info('serviceValueBuffer = '+ JSON.stringify(serviceValueBuffer));
try {
    let setting: ble.AdvertiseSetting = {
        interval:150,
        txPower:0,
        connectable:true
    };
    let manufactureDataUnit: ble.ManufactureData = {
        manufactureId:4567,
        manufactureValue:manufactureValueBuffer.buffer
    };
    let serviceDataUnit: ble.ServiceData = {
        serviceUuid:"00001888-0000-1000-8000-00805f9b34fb",
        serviceValue:serviceValueBuffer.buffer
    };
    let advData: ble.AdvertiseData = {
        serviceUuids:["00001888-0000-1000-8000-00805f9b34fb"],
        manufactureData:[manufactureDataUnit],
        serviceData:[serviceDataUnit]
    };
    let advResponse: ble.AdvertiseData = {
        serviceUuids:["00001888-0000-1000-8000-00805f9b34fb"],
        manufactureData:[manufactureDataUnit],
        serviceData:[serviceDataUnit]
    };
    let advertisingParams: ble.AdvertisingParams = {
        advertisingSettings: setting,
        advertisingData: advData,
        advertisingResponse: advResponse,
        duration: 300
    }
    let advHandle = 0xFF;
    ble.startAdvertising(advertisingParams, (err, outAdvHandle) => {
        if (err) {
            return;
        } else {
            advHandle = outAdvHandle;
            console.info("advHandle: " + advHandle);
        }
    });

    let advertisingEnableParams: ble.AdvertisingEnableParams = {
        advertisingId: advHandle,
        duration: 0
    }

    // after 3s, advertising disabled, then enable the advertising
    ble.enableAdvertising(advertisingEnableParams)
        .then(() => {
            console.info("enable success");
    });
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

ble.disableAdvertising11+

disableAdvertising(advertisingDisableParams: AdvertisingDisableParams, callback: AsyncCallback<void>): void

停止指定标识的BLE广播。使用Callback异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
advertisingDisableParams AdvertisingDisableParams 临时关闭BLE广播的相关参数。
callback AsyncCallback<void> 回调函数。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let manufactureValueBuffer = new Uint8Array(4);
manufactureValueBuffer[0] = 1;
manufactureValueBuffer[1] = 2;
manufactureValueBuffer[2] = 3;
manufactureValueBuffer[3] = 4;

let serviceValueBuffer = new Uint8Array(4);
serviceValueBuffer[0] = 4;
serviceValueBuffer[1] = 6;
serviceValueBuffer[2] = 7;
serviceValueBuffer[3] = 8;
console.info('manufactureValueBuffer = '+ JSON.stringify(manufactureValueBuffer));
console.info('serviceValueBuffer = '+ JSON.stringify(serviceValueBuffer));
try {
    let setting: ble.AdvertiseSetting = {
        interval:150,
        txPower:0,
        connectable:true
    };
    let manufactureDataUnit: ble.ManufactureData = {
        manufactureId:4567,
        manufactureValue:manufactureValueBuffer.buffer
    };
    let serviceDataUnit: ble.ServiceData = {
        serviceUuid:"00001888-0000-1000-8000-00805f9b34fb",
        serviceValue:serviceValueBuffer.buffer
    };
    let advData: ble.AdvertiseData = {
        serviceUuids:["00001888-0000-1000-8000-00805f9b34fb"],
        manufactureData:[manufactureDataUnit],
        serviceData:[serviceDataUnit]
    };
    let advResponse: ble.AdvertiseData = {
        serviceUuids:["00001888-0000-1000-8000-00805f9b34fb"],
        manufactureData:[manufactureDataUnit],
        serviceData:[serviceDataUnit]
    };
    let advertisingParams: ble.AdvertisingParams = {
        advertisingSettings: setting,
        advertisingData: advData,
        advertisingResponse: advResponse,
        duration: 0
    }
    let advHandle = 0xFF;
    ble.startAdvertising(advertisingParams, (err, outAdvHandle) => {
        if (err) {
            return;
        } else {
            advHandle = outAdvHandle;
            console.info("advHandle: " + advHandle);
        }
    });

    let advertisingDisableParams: ble.AdvertisingDisableParams = {
        advertisingId: advHandle
    }
    ble.disableAdvertising(advertisingDisableParams, (err) => {
        if (err) {
            return;
        }
    });
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

ble.disableAdvertising11+

disableAdvertising(advertisingDisableParams: AdvertisingDisableParams): Promise<void>

停止指定标识的BLE广播。使用Promise异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
advertisingDisableParams AdvertisingDisableParams 临时关闭BLE广播的相关参数。

返回值:

类型 说明
Promise<void> 回调函数。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let manufactureValueBuffer = new Uint8Array(4);
manufactureValueBuffer[0] = 1;
manufactureValueBuffer[1] = 2;
manufactureValueBuffer[2] = 3;
manufactureValueBuffer[3] = 4;

let serviceValueBuffer = new Uint8Array(4);
serviceValueBuffer[0] = 4;
serviceValueBuffer[1] = 6;
serviceValueBuffer[2] = 7;
serviceValueBuffer[3] = 8;
console.info('manufactureValueBuffer = '+ JSON.stringify(manufactureValueBuffer));
console.info('serviceValueBuffer = '+ JSON.stringify(serviceValueBuffer));
try {
    let setting: ble.AdvertiseSetting = {
        interval:150,
        txPower:0,
        connectable:true
    };
    let manufactureDataUnit: ble.ManufactureData = {
        manufactureId:4567,
        manufactureValue:manufactureValueBuffer.buffer
    };
    let serviceDataUnit: ble.ServiceData = {
        serviceUuid:"00001888-0000-1000-8000-00805f9b34fb",
        serviceValue:serviceValueBuffer.buffer
    };
    let advData: ble.AdvertiseData = {
        serviceUuids:["00001888-0000-1000-8000-00805f9b34fb"],
        manufactureData:[manufactureDataUnit],
        serviceData:[serviceDataUnit]
    };
    let advResponse: ble.AdvertiseData = {
        serviceUuids:["00001888-0000-1000-8000-00805f9b34fb"],
        manufactureData:[manufactureDataUnit],
        serviceData:[serviceDataUnit]
    };
    let advertisingParams: ble.AdvertisingParams = {
        advertisingSettings: setting,
        advertisingData: advData,
        advertisingResponse: advResponse,
        duration: 0
    }
    let advHandle = 0xFF;
    ble.startAdvertising(advertisingParams, (err, outAdvHandle) => {
        if (err) {
            return;
        } else {
            advHandle = outAdvHandle;
            console.info("advHandle: " + advHandle);
        }
    });

    let advertisingDisableParams: ble.AdvertisingDisableParams = {
        advertisingId: advHandle
    }
    ble.disableAdvertising(advertisingDisableParams)
        .then(() => {
            console.info("enable success");
    });
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

ble.stopAdvertising11+

stopAdvertising(advertisingId: number, callback: AsyncCallback<void>): void

完全停止发送BLE广播。使用Callback异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
advertisingId number 需要停止的广播ID标识。
callback AsyncCallback<void> 回调函数。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let manufactureValueBuffer = new Uint8Array(4);
manufactureValueBuffer[0] = 1;
manufactureValueBuffer[1] = 2;
manufactureValueBuffer[2] = 3;
manufactureValueBuffer[3] = 4;

let serviceValueBuffer = new Uint8Array(4);
serviceValueBuffer[0] = 4;
serviceValueBuffer[1] = 6;
serviceValueBuffer[2] = 7;
serviceValueBuffer[3] = 8;
console.info('manufactureValueBuffer = '+ JSON.stringify(manufactureValueBuffer));
console.info('serviceValueBuffer = '+ JSON.stringify(serviceValueBuffer));
try {
    let setting: ble.AdvertiseSetting = {
        interval:150,
        txPower:0,
        connectable:true
    };
    let manufactureDataUnit: ble.ManufactureData = {
        manufactureId:4567,
        manufactureValue:manufactureValueBuffer.buffer
    };
    let serviceDataUnit: ble.ServiceData = {
        serviceUuid:"00001888-0000-1000-8000-00805f9b34fb",
        serviceValue:serviceValueBuffer.buffer
    };
    let advData: ble.AdvertiseData = {
        serviceUuids:["00001888-0000-1000-8000-00805f9b34fb"],
        manufactureData:[manufactureDataUnit],
        serviceData:[serviceDataUnit]
    };
    let advResponse: ble.AdvertiseData = {
        serviceUuids:["00001888-0000-1000-8000-00805f9b34fb"],
        manufactureData:[manufactureDataUnit],
        serviceData:[serviceDataUnit]
    };
    let advertisingParams: ble.AdvertisingParams = {
        advertisingSettings: setting,
        advertisingData: advData,
        advertisingResponse: advResponse,
        duration: 0
    }
    let advHandle = 0xFF;
    ble.startAdvertising(advertisingParams, (err, outAdvHandle) => {
        if (err) {
            return;
        } else {
            advHandle = outAdvHandle;
            console.info("advHandle: " + advHandle);
        }
    });

    ble.stopAdvertising(advHandle, (err) => {
        if (err) {
            return;
        }
    });
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

ble.stopAdvertising11+

stopAdvertising(advertisingId: number): Promise<void>

完全停止发送BLE广播。使用Promise异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
advertisingId number 需要停止的广播ID标识。

返回值:

类型 说明
Promise<void> 回调函数。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let manufactureValueBuffer = new Uint8Array(4);
manufactureValueBuffer[0] = 1;
manufactureValueBuffer[1] = 2;
manufactureValueBuffer[2] = 3;
manufactureValueBuffer[3] = 4;

let serviceValueBuffer = new Uint8Array(4);
serviceValueBuffer[0] = 4;
serviceValueBuffer[1] = 6;
serviceValueBuffer[2] = 7;
serviceValueBuffer[3] = 8;
console.info('manufactureValueBuffer = '+ JSON.stringify(manufactureValueBuffer));
console.info('serviceValueBuffer = '+ JSON.stringify(serviceValueBuffer));
try {
    let setting: ble.AdvertiseSetting = {
        interval:150,
        txPower:0,
        connectable:true
    };
    let manufactureDataUnit: ble.ManufactureData = {
        manufactureId:4567,
        manufactureValue:manufactureValueBuffer.buffer
    };
    let serviceDataUnit: ble.ServiceData = {
        serviceUuid:"00001888-0000-1000-8000-00805f9b34fb",
        serviceValue:serviceValueBuffer.buffer
    };
    let advData: ble.AdvertiseData = {
        serviceUuids:["00001888-0000-1000-8000-00805f9b34fb"],
        manufactureData:[manufactureDataUnit],
        serviceData:[serviceDataUnit]
    };
    let advResponse: ble.AdvertiseData = {
        serviceUuids:["00001888-0000-1000-8000-00805f9b34fb"],
        manufactureData:[manufactureDataUnit],
        serviceData:[serviceDataUnit]
    };
    let advertisingParams: ble.AdvertisingParams = {
        advertisingSettings: setting,
        advertisingData: advData,
        advertisingResponse: advResponse,
        duration: 0
    }
    let advHandle = 0xFF;
    ble.startAdvertising(advertisingParams, (err, outAdvHandle) => {
        if (err) {
            return;
        } else {
            advHandle = outAdvHandle;
            console.info("advHandle: " + advHandle);
        }
    });

    ble.stopAdvertising(advHandle)
        .then(() => {
            console.info("enable success");
    });
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

ble.on('advertisingStateChange')11+

on(type: 'advertisingStateChange', callback: Callback<AdvertisingStateChangeInfo>): void

订阅BLE广播状态。使用Callback异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'advertisingStateChange',表示广播状态事件。
当调用ble.startAdvertisingble.stopAdvertisingble.enableAdvertisingble.disableAdvertising,广播状态改变时,均会触发该事件。
callback Callback<AdvertisingStateChangeInfo> 指定订阅的回调函数,会携带广播状态信息。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
function onReceiveEvent(data: ble.AdvertisingStateChangeInfo) {
    console.info('bluetooth advertising state = ' + JSON.stringify(data));
}
try {
    ble.on('advertisingStateChange', onReceiveEvent);
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

ble.off('advertisingStateChange')11+

off(type: 'advertisingStateChange', callback?: Callback<AdvertisingStateChangeInfo>): void

取消订阅BLE广播状态。广播停止或启动将不再收到通知。

需要权限:ohos.permission.ACCESS_BLUETOOTH

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'advertisingStateChange',表示广播状态事件。
callback Callback<AdvertisingStateChangeInfo> 指定取消订阅的回调函数通知。
若传参,则需与ble.on('advertisingStateChange')中的回调函数一致;若无传参,则取消订阅该type对应的所有回调函数通知。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
function onReceiveEvent(data: ble.AdvertisingStateChangeInfo) {
    console.info('bluetooth advertising state = ' + JSON.stringify(data));
}
try {
    ble.on('advertisingStateChange', onReceiveEvent);
    ble.off('advertisingStateChange', onReceiveEvent);
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

ble.on('BLEDeviceFind')

on(type: 'BLEDeviceFind', callback: Callback<Array<ScanResult>>): void

订阅BLE设备扫描结果上报事件。使用Callback异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'BLEDeviceFind',表示BLE设备扫描结果上报事件。
当调用ble.startBLEScan 后,开始BLE扫描,若扫描到BLE设备,触发该事件。
callback Callback<Array<ScanResult>> 指定订阅的回调函数,会携带扫描结果的集合。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
function onReceiveEvent(data: Array<ble.ScanResult>) {
    console.info('bluetooth device find = '+ JSON.stringify(data));
}
try {
    ble.on('BLEDeviceFind', onReceiveEvent);
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

ble.off('BLEDeviceFind')

off(type: 'BLEDeviceFind', callback?: Callback<Array<ScanResult>>): void

取消订阅BLE设备扫描结果上报事件。

  • 若不再需要扫描BLE设备,调用ble.stopBLEScan方法后,需要调用此方法取消订阅。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'BLEDeviceFind',表示BLE设备扫描结果上报事件。
callback Callback<Array<ScanResult>> 指定取消订阅的回调函数通知。
若传参,则需与ble.on('BLEDeviceFind')中的回调函数一致;若无传参,则取消订阅该type对应的所有回调函数通知。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
function onReceiveEvent(data: Array<ble.ScanResult>) {
    console.info('bluetooth device find = '+ JSON.stringify(data));
}
try {
    ble.on('BLEDeviceFind', onReceiveEvent);
    ble.off('BLEDeviceFind', onReceiveEvent);
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

GattServer

GATT通信中的服务端类。

addService

addService(service: GattService): void

server端添加服务。该操作会在蓝牙子系统中注册该服务,表示server端支持的能力。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
service GattService server端的service数据。表示支持的特定功能。
例如:00001800-0000-1000-8000-00805f9b34fb表示通用访问服务;00001801-0000-1000-8000-00805f9b34fb表示通用属性服务等。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
// 创建descriptors。
let descriptors: Array<ble.BLEDescriptor> = [];
let arrayBuffer = new ArrayBuffer(2);
let descV = new Uint8Array(arrayBuffer);
descV[0] = 0; // 以Client Characteristic Configuration描述符为例,表示bit0、bit1均为0,notification和indication均不开启
let descriptor: ble.BLEDescriptor = {serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
  characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
  descriptorUuid: '00002902-0000-1000-8000-00805F9B34FB', descriptorValue: arrayBuffer};
descriptors[0] = descriptor;

// 创建characteristics。
let characteristics: Array<ble.BLECharacteristic> = [];
let arrayBufferC = new ArrayBuffer(8);
let cccV = new Uint8Array(arrayBufferC);
cccV[0] = 1;
let characteristic: ble.BLECharacteristic = {serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
  characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB', characteristicValue: arrayBufferC, descriptors:descriptors};
characteristics[0] = characteristic;

// 创建gattService。
let gattService: ble.GattService = {serviceUuid:'00001810-0000-1000-8000-00805F9B34FB', isPrimary: true, characteristics:characteristics, includeServices:[]};

try {
    let gattServer: ble.GattServer = ble.createGattServer();
    gattServer.addService(gattService);
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

removeService

removeService(serviceUuid: string): void

删除server端已添加的服务。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
serviceUuid string 即将删除的服务的UUID。例如:00001810-0000-1000-8000-00805F9B34FB。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900004 Profile not supported.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let server: ble.GattServer = ble.createGattServer();
try {
    // 调用removeService接口前需要完成server端和client端的配对及连接。
    server.removeService('00001810-0000-1000-8000-00805F9B34FB');
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

close

close(): void

销毁server端实例。销毁后,通过ble.createGattServer创建的实例将不可用。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let server: ble.GattServer = ble.createGattServer();
try {
    server.close();
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

notifyCharacteristicChanged

notifyCharacteristicChanged(deviceId: string, notifyCharacteristic: NotifyCharacteristic, callback: AsyncCallback<void>): void

server端发送特征值变化通知或者指示给client端。使用Callback异步回调。

  • 建议该特征值的Client Characteristic Configuration描述符(UUID:00002902-0000-1000-8000-00805f9b34fb)notification(通知)或indication(指示)能力已被使能。
  • 蓝牙标准协议规定Client Characteristic Configuration描述符的数据内容长度为2字节,bit0和bit1分别表示notification(通知)和indication(指示)能力是否使能,例如bit0 = 1表示notification enabled。
  • 该特征值数据内容变化时调用。
  • notifyCharacteristic入参的characteristicValue数据长度默认限制为(MTU-3)字节,MTU大小可从订阅的回调on('BLEMtuChange')获取。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
deviceId string 接收通知的client设备地址。例如:“XX:XX:XX:XX:XX:XX”。
notifyCharacteristic NotifyCharacteristic 通知给client的特征值数据对象。
callback AsyncCallback<void> 回调函数。当通知成功,err为undefined,否则为错误对象。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let arrayBufferC = new ArrayBuffer(8);
let notifyCharacter: ble.NotifyCharacteristic = {
    serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
    characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
    characteristicValue: arrayBufferC,
    confirm: true
};
try {
    let gattServer: ble.GattServer = ble.createGattServer();
    gattServer.notifyCharacteristicChanged('XX:XX:XX:XX:XX:XX', notifyCharacter, (err: BusinessError) => {
        if (err) {
            console.error('notifyCharacteristicChanged callback failed');
        } else {
            console.info('notifyCharacteristicChanged callback successful');
        }
    });
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

notifyCharacteristicChanged

notifyCharacteristicChanged(deviceId: string, notifyCharacteristic: NotifyCharacteristic): Promise<void>

server端发送特征值变化通知或者指示给对端设备。使用Promise异步回调。

  • 建议该特征值的Client Characteristic Configuration描述符notification(通知)或indication(指示)能力已被使能。
  • 蓝牙标准协议规定Client Characteristic Configuration描述符的数据内容长度为2字节,bit0和bit1分别表示notification(通知)和indication(指示)能力是否使能,例如bit0 = 1表示notification enabled。
  • 该特征值数据内容变化时调用。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
deviceId string 接收通知的client设备地址。例如:“XX:XX:XX:XX:XX:XX”。
notifyCharacteristic NotifyCharacteristic 通知给client的特征值数据对象。

返回值:

类型 说明
Promise<void> Promise对象。无返回结果的Promise对象。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let arrayBufferC = new ArrayBuffer(8);
let notifyCharacter: ble.NotifyCharacteristic = {
    serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
    characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
    characteristicValue: arrayBufferC,
    confirm: true
};
try {
    let gattServer: ble.GattServer = ble.createGattServer();
    gattServer.notifyCharacteristicChanged('XX:XX:XX:XX:XX:XX', notifyCharacter).then(() => {
        console.info('notifyCharacteristicChanged promise successful');
    });
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

sendResponse

sendResponse(serverResponse: ServerResponse): void

server端收到client的请求操作后,需要调用此接口回复client,否则可能导致链路异常,超时后断连。

client请求是指通过下述接口订阅回调收到的请求消息:

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
serverResponse ServerResponse server端回复client的响应数据。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
/* send response */
let arrayBufferCCC = new ArrayBuffer(8);
let cccValue = new Uint8Array(arrayBufferCCC);
cccValue[0] = 1123;
let serverResponse: ble.ServerResponse = {
    deviceId: 'XX:XX:XX:XX:XX:XX',
    transId: 0,
    status: 0,
    offset: 0,
    value: arrayBufferCCC
};
try {
    let gattServer: ble.GattServer = ble.createGattServer();
    gattServer.sendResponse(serverResponse);
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

on('characteristicRead')

on(type: 'characteristicRead', callback: Callback<CharacteristicReadRequest>): void

server端订阅client的特征值读请求事件,server端收到该事件后需要调用sendResponse接口回复client。使用Callback异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'characteristicRead',表示特征值读请求事件。
当收到client端设备的读取特征值请求时,触发该事件。
callback Callback<CharacteristicReadRequest> 指定订阅的回调函数,会携带client端发送的读请求数据。

错误码

以下错误码的详细介绍请参见通用错误码说明文档

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let arrayBufferCCC = new ArrayBuffer(8);
let cccValue = new Uint8Array(arrayBufferCCC);
cccValue[0] = 1123;
let gattServer: ble.GattServer = ble.createGattServer();
function ReadCharacteristicReq(characteristicReadRequest: ble.CharacteristicReadRequest) {
    let deviceId: string = characteristicReadRequest.deviceId;
    let transId: number = characteristicReadRequest.transId;
    let offset: number = characteristicReadRequest.offset;
    let characteristicUuid: string = characteristicReadRequest.characteristicUuid;

    let serverResponse: ble.ServerResponse = {deviceId: deviceId, transId: transId, status: 0, offset: offset, value:arrayBufferCCC};

    try {
        gattServer.sendResponse(serverResponse);
    } catch (err) {
        console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
    }
}
gattServer.on('characteristicRead', ReadCharacteristicReq);

off('characteristicRead')

off(type: 'characteristicRead', callback?: Callback<CharacteristicReadRequest>): void

server端取消订阅client的特征值读请求事件。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'characteristicRead',表示特征值读请求事件。
callback Callback<CharacteristicReadRequest> 指定取消订阅的回调函数通知。
若传参,则需与on('characteristicRead')中的回调函数一致;若无传参,则取消订阅该type对应的所有回调函数通知。

错误码

以下错误码的详细介绍请参见通用错误码说明文档

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
try {
    let gattServer: ble.GattServer = ble.createGattServer();
    gattServer.off('characteristicRead');
} catch (err) {
    console.error("errCode:" + (err as BusinessError).code + ",errMessage:" + (err as BusinessError).message);
}

on('characteristicWrite')

on(type: 'characteristicWrite', callback: Callback<CharacteristicWriteRequest>): void

server端订阅client的特征值写请求事件,server端收到该事件后需要根据CharacteristicWriteRequest中的needRsp决定是否调用sendResponse接口回复client。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'characteristicWrite',表示特征值写请求事件。
当收到client端设备的写特征值请求时,触发该事件。
callback Callback<CharacteristicWriteRequest> 指定订阅的回调函数,会携带client端发送的写请求数据。

错误码

以下错误码的详细介绍请参见通用错误码说明文档

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let arrayBufferCCC = new ArrayBuffer(8);
let cccValue = new Uint8Array(arrayBufferCCC);
let gattServer: ble.GattServer = ble.createGattServer();
function WriteCharacteristicReq(characteristicWriteRequest: ble.CharacteristicWriteRequest) {
    let deviceId: string = characteristicWriteRequest.deviceId;
    let transId: number = characteristicWriteRequest.transId;
    let offset: number = characteristicWriteRequest.offset;
    let isPrepared: boolean = characteristicWriteRequest.isPrepared;
    let needRsp: boolean = characteristicWriteRequest.needRsp;
    let value: Uint8Array =  new Uint8Array(characteristicWriteRequest.value);
    let characteristicUuid: string = characteristicWriteRequest.characteristicUuid;

    cccValue[0] = value[0];
    let serverResponse: ble.ServerResponse = {deviceId: deviceId, transId: transId, status: 0, offset: offset, value:arrayBufferCCC};

    try {
        gattServer.sendResponse(serverResponse);
    } catch (err) {
        console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
    }
}
gattServer.on('characteristicWrite', WriteCharacteristicReq);

off('characteristicWrite')

off(type: 'characteristicWrite', callback?: Callback<CharacteristicWriteRequest>): void

server端取消订阅client的特征值写请求事件。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'characteristicWrite',表示特征值写请求事件。
callback Callback<CharacteristicWriteRequest> 指定取消订阅的回调函数通知。
若传参,则需与on('characteristicWrite')中的回调函数一致;若无传参,则取消订阅该type对应的所有回调函数通知。

错误码

以下错误码的详细介绍请参见通用错误码说明文档

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
try {
    let gattServer: ble.GattServer = ble.createGattServer();
    gattServer.off('characteristicWrite');
} catch (err) {
    console.error("errCode:" + (err as BusinessError).code + ",errMessage:" + (err as BusinessError).message);
}

on('descriptorRead')

on(type: 'descriptorRead', callback: Callback<DescriptorReadRequest>): void

server端订阅client的描述符读请求事件,server端收到该事件后需要调用sendResponse接口回复client。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'descriptorRead',表示描述符读请求事件。
当收到client端设备的读取描述符请求时,触发该事件。
callback Callback<DescriptorReadRequest> 指定订阅的回调函数,会携带client端发送的读请求数据。

错误码

以下错误码的详细介绍请参见通用错误码说明文档

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let arrayBufferDesc = new ArrayBuffer(8);
let descValue = new Uint8Array(arrayBufferDesc);
descValue[0] = 1101;
let gattServer: ble.GattServer = ble.createGattServer();
function ReadDescriptorReq(descriptorReadRequest: ble.DescriptorReadRequest) {
    let deviceId: string = descriptorReadRequest.deviceId;
    let transId: number = descriptorReadRequest.transId;
    let offset: number = descriptorReadRequest.offset;
    let descriptorUuid: string = descriptorReadRequest.descriptorUuid;

    let serverResponse: ble.ServerResponse = {deviceId: deviceId, transId: transId, status: 0, offset: offset, value:arrayBufferDesc};

    try {
        gattServer.sendResponse(serverResponse);
    } catch (err) {
        console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
    }
}
gattServer.on('descriptorRead', ReadDescriptorReq);

off('descriptorRead')

off(type: 'descriptorRead', callback?: Callback<DescriptorReadRequest>): void

server端取消订阅client的描述符读请求事件。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'descriptorRead',表示描述符读请求事件。
callback Callback<DescriptorReadRequest> 指定取消订阅的回调函数通知。
若传参,则需与on('descriptorRead')中的回调函数一致;若无传参,则取消订阅该type对应的所有回调函数通知。

错误码

以下错误码的详细介绍请参见通用错误码说明文档

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
try {
    let gattServer: ble.GattServer = ble.createGattServer();
    gattServer.off('descriptorRead');
} catch (err) {
    console.error("errCode:" + (err as BusinessError).code + ",errMessage:" + (err as BusinessError).message);
}

on('descriptorWrite')

on(type: 'descriptorWrite', callback: Callback<DescriptorWriteRequest>): void

server端订阅client的描述符写请求事件,server端收到该事件后需要根据DescriptorWriteRequest里的needRsp决定是否调用sendResponse接口回复client。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'descriptorWrite',表示描述符写请求事件。
当收到client端设备的写描述符请求时,触发该事件。
callback Callback<DescriptorWriteRequest> 指定订阅的回调函数,会携带client端发送的写请求数据。

错误码

以下错误码的详细介绍请参见通用错误码说明文档

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let arrayBufferDesc = new ArrayBuffer(8);
let descValue = new Uint8Array(arrayBufferDesc);
let gattServer: ble.GattServer = ble.createGattServer();
function WriteDescriptorReq(descriptorWriteRequest: ble.DescriptorWriteRequest) {
    let deviceId: string = descriptorWriteRequest.deviceId;
    let transId: number = descriptorWriteRequest.transId;
    let offset: number = descriptorWriteRequest.offset;
    let isPrepared: boolean = descriptorWriteRequest.isPrepared;
    let needRsp: boolean = descriptorWriteRequest.needRsp;
    let value: Uint8Array = new Uint8Array(descriptorWriteRequest.value);
    let descriptorUuid: string = descriptorWriteRequest.descriptorUuid;

    descValue[0] = value[0];
    let serverResponse: ble.ServerResponse = {deviceId: deviceId, transId: transId, status: 0, offset: offset, value:arrayBufferDesc};

    try {
        gattServer.sendResponse(serverResponse);
    } catch (err) {
        console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
    }
}
gattServer.on('descriptorWrite', WriteDescriptorReq);

off('descriptorWrite')

off(type: 'descriptorWrite', callback?: Callback<DescriptorWriteRequest>): void

server端取消订阅client的描述符写请求事件。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'descriptorWrite',表示描述符写请求事件。
callback Callback<DescriptorWriteRequest> 指定取消订阅的回调函数通知。
若传参,则需与on('descriptorWrite')中的回调函数一致;若无传参,则取消订阅该type对应的所有回调函数通知。

错误码

以下错误码的详细介绍请参见通用错误码说明文档

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
try {
let gattServer: ble.GattServer = ble.createGattServer();
gattServer.off('descriptorWrite');
} catch (err) {
    console.error("errCode:" + (err as BusinessError).code + ",errMessage:" + (err as BusinessError).message);
}

on('connectionStateChange')

on(type: 'connectionStateChange', callback: Callback<BLEConnectionChangeState>): void

server端订阅GATT profile协议的连接状态变化事件。使用Callback异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'connectionStateChange',表示GATT profile连接状态发生变化的事件。
当client和server端之间的连接状态发生变化时,触发该事件。
例如:收到连接请求或者断连请求时,可能引起连接状态生变化。
callback Callback<BLEConnectionChangeState> 指定订阅的回调函数,会携带连接状态。

错误码

以下错误码的详细介绍请参见通用错误码说明文档

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.

示例:

import { BusinessError } from '@kit.BasicServicesKit';
import { constant } from '@kit.ConnectivityKit';
let connected = (bleConnectionChangeState: ble.BLEConnectionChangeState) => {
    let deviceId: string = bleConnectionChangeState.deviceId;
    let status: constant.ProfileConnectionState = bleConnectionChangeState.state;
}
try {
    let gattServer: ble.GattServer = ble.createGattServer();
    gattServer.on('connectionStateChange', connected);
} catch (err) {
    console.error("errCode:" + (err as BusinessError).code + ",errMessage:" + (err as BusinessError).message);
}

off('connectionStateChange')

off(type: 'connectionStateChange', callback?: Callback<BLEConnectionChangeState>): void

server端取消订阅GATT profile协议的连接状态变化事件。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'connectionStateChange',表示GATT profile连接状态发生变化的事件。
callback Callback<BLEConnectionChangeState> 指定取消订阅的回调函数通知。
若传参,则需与on('connectionStateChange')中的回调函数一致;若无传参,则取消订阅该type对应的所有回调函数通知。

错误码

以下错误码的详细介绍请参见通用错误码说明文档

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
try {
    let gattServer: ble.GattServer = ble.createGattServer();
    gattServer.off('connectionStateChange');
} catch (err) {
    console.error("errCode:" + (err as BusinessError).code + ",errMessage:" + (err as BusinessError).message);
}

on('BLEMtuChange')

on(type: 'BLEMtuChange', callback: Callback<number>): void

server端订阅MTU(最大传输单元)大小变更事件。使用Callback异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'BLEMtuChange',表示MTU状态变化事件。
当收到了client端发起了MTU协商请求时,触发该事件。
callback Callback<number> 指定订阅的回调函数,会携带协商后的MTU大小。单位:Byte。

错误码

以下错误码的详细介绍请参见通用错误码说明文档

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
try {
    let gattServer: ble.GattServer = ble.createGattServer();
    gattServer.on('BLEMtuChange', (mtu: number) => {
    console.info('BLEMtuChange, mtu: ' + mtu);
    });
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

off('BLEMtuChange')

off(type: 'BLEMtuChange', callback?: Callback<number>): void

server端取消订阅MTU(最大传输单元)大小变更事件。

需要权限:ohos.permission.ACCESS_BLUETOOTH

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为"BLEMtuChange",表示MTU状态变化事件。
callback Callback<number> 指定取消订阅的回调函数通知。
若传参,则需与on('BLEMtuChange')中的回调函数一致;若无传参,则取消订阅该type对应的所有回调函数通知。

错误码

以下错误码的详细介绍请参见通用错误码说明文档

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
try {
    let gattServer: ble.GattServer = ble.createGattServer();
    gattServer.off('BLEMtuChange');
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

GattClientDevice

GATT客户端类,提供了和服务端进行连接和数据传输等操作方法。

  • 使用该类的方法前,需通过createGattClientDevice方法构造该类的实例。
  • 通过创建不同的该类实例,可以管理多路GATT连接。

connect

connect(): void

client端主动发起和server蓝牙设备的GATT协议连接。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
try {
    let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
    device.connect();
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

disconnect

disconnect(): void

client断开与远端蓝牙低功耗设备的连接。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
try {
    let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
    device.disconnect();
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

close

close(): void

销毁client端实例。销毁后,通过GattClientDevice创建的实例将不可用。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
try {
    let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
    device.close();
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

getDeviceName

getDeviceName(callback: AsyncCallback<string>): void

client获取server端设备名称。使用Callback异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
callback AsyncCallback<string> 回调函数。当读取成功,err为undefined,data为server端设备名称。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.
801 Capability not supported.
2900001 Service stopped.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
// callback
try {
    let gattClient: ble.GattClientDevice = ble.createGattClientDevice("XX:XX:XX:XX:XX:XX");
    gattClient.connect();
    gattClient.getDeviceName((err: BusinessError, data: string)=> {
        console.info('device name err ' + JSON.stringify(err));
        console.info('device name' + JSON.stringify(data));
    })
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

getDeviceName

getDeviceName(): Promise<string>

client获取远端蓝牙低功耗设备的名称。使用Promise异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

返回值:

类型 说明
Promise<string> Promise对象,携带server端设备名称。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.
801 Capability not supported.
2900001 Service stopped.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
// promise
try {
    let gattClient: ble.GattClientDevice = ble.createGattClientDevice("XX:XX:XX:XX:XX:XX");
    gattClient.connect();
    gattClient.getDeviceName().then((data: string) => {
        console.info('device name' + JSON.stringify(data));
    })
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

getServices

getServices(callback: AsyncCallback<Array<GattService>>): void

client获取server端支持的所有服务能力,即服务发现流程。使用Callback异步回调。

应用调用该方法后,才能调用其他读写特征值、描述符等其他方法,且需确保server支持的服务能力中包含需要操作的特征值或描述符。包含接口如下所示:

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
callback AsyncCallback<Array<GattService>> 回调函数。当读取成功,err为undefined,data为server端的服务列表。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.
801 Capability not supported.
2900001 Service stopped.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
// callback 模式。
let getServices = (code: BusinessError, gattServices: Array<ble.GattService>) => {
    if (code && code.code != 0) {
        console.info('bluetooth code is ' + code.code);
        return;
    }
    let services: Array<ble.GattService> = gattServices;
    console.info('bluetooth services size is ', services.length);
    for (let i = 0; i < services.length; i++) {
        console.info('bluetooth serviceUuid is ' + services[i].serviceUuid);
    }
}

try {
    let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
    device.connect();
    device.getServices(getServices);
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

getServices

getServices(): Promise<Array<GattService>>

client端获取蓝牙低功耗设备的所有服务,即服务发现。使用Promise异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

返回值:

类型 说明
Promise<Array<GattService>> Promise对象,返回获取到的server端服务列表。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
// Promise 模式。
try {
    let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
    device.connect();
    device.getServices().then((result: Array<ble.GattService>) => {
        console.info('getServices successfully:' + JSON.stringify(result));
    });
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

readCharacteristicValue

readCharacteristicValue(characteristic: BLECharacteristic, callback: AsyncCallback<BLECharacteristic>): void

client端从指定的server端特征值读取数据。使用Callback异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
characteristic BLECharacteristic 需要读取的特征值。
callback AsyncCallback<BLECharacteristic> 回调函数。当读取成功,err为undefined,data为获取到的特征值对象,包含读取到的数据内容;否则为错误对象。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2901000 Read forbidden.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
function readCcc(code: BusinessError, BLECharacteristic: ble.BLECharacteristic) {
  if (code.code != 0) {
      return;
  }
  console.info('bluetooth characteristic uuid: ' + BLECharacteristic.characteristicUuid);
  let value = new Uint8Array(BLECharacteristic.characteristicValue);
  console.info('bluetooth characteristic value: ' + value[0] +','+ value[1]+','+ value[2]+','+ value[3]);
}

let descriptors: Array<ble.BLEDescriptor> = [];
let bufferDesc = new ArrayBuffer(2);
let descV = new Uint8Array(bufferDesc);
descV[0] = 0; // 以Client Characteristic Configuration描述符为例,表示bit0、bit1均为0,notification和indication均不开启
let descriptor: ble.BLEDescriptor = {serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
descriptorUuid: '00002902-0000-1000-8000-00805F9B34FB', descriptorValue: bufferDesc};
descriptors[0] = descriptor;

let bufferCCC = new ArrayBuffer(8);
let cccV = new Uint8Array(bufferCCC);
cccV[0] = 1;
let characteristic: ble.BLECharacteristic = {serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
characteristicValue: bufferCCC, descriptors:descriptors};

try {
    let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
    device.readCharacteristicValue(characteristic, readCcc);
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

readCharacteristicValue

readCharacteristicValue(characteristic: BLECharacteristic): Promise<BLECharacteristic>

client端从指定的server端特征值读取数据。使用Promise异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
characteristic BLECharacteristic 需要读取的特征值。

返回值:

类型 说明
Promise<BLECharacteristic> Promise对象,返回获取到的特征值对象,包含读取到的数据内容。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2901000 Read forbidden.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let descriptors: Array<ble.BLEDescriptor> = [];
let bufferDesc = new ArrayBuffer(2);
let descV = new Uint8Array(bufferDesc);
descV[0] = 0; // 以Client Characteristic Configuration描述符为例,表示bit0、bit1均为0,notification和indication均不开启
let descriptor: ble.BLEDescriptor = {serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
descriptorUuid: '00002902-0000-1000-8000-00805F9B34FB', descriptorValue: bufferDesc};
descriptors[0] = descriptor;

let bufferCCC = new ArrayBuffer(8);
let cccV = new Uint8Array(bufferCCC);
cccV[0] = 1;
let characteristic: ble.BLECharacteristic = {serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
characteristicValue: bufferCCC, descriptors:descriptors};

try {
    let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
    device.readCharacteristicValue(characteristic);
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

readDescriptorValue

readDescriptorValue(descriptor: BLEDescriptor, callback: AsyncCallback<BLEDescriptor>): void

client端从指定的server端描述符读取数据。使用Callback异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
descriptor BLEDescriptor 需要读取的描述符。
callback AsyncCallback<BLEDescriptor> 回调函数。当读取成功,err为undefined,data为获取到的描述符对象,包含读取到的数据内容;否则为错误对象。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2901000 Read forbidden.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
function readDesc(code: BusinessError, BLEDescriptor: ble.BLEDescriptor) {
    if (code.code != 0) {
        return;
    }
    console.info('bluetooth descriptor uuid: ' + BLEDescriptor.descriptorUuid);
    let value = new Uint8Array(BLEDescriptor.descriptorValue);
    console.info('bluetooth descriptor value: ' + value[0] +','+ value[1]+','+ value[2]+','+ value[3]);
}

let bufferDesc = new ArrayBuffer(2);
let descV = new Uint8Array(bufferDesc);
descV[0] = 0; // 以Client Characteristic Configuration描述符为例,表示bit0、bit1均为0,notification和indication均不开启
let descriptor: ble.BLEDescriptor = {
    serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
    characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
    descriptorUuid: '00002902-0000-1000-8000-00805F9B34FB',
    descriptorValue: bufferDesc
};
try {
    let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
    device.readDescriptorValue(descriptor, readDesc);
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

readDescriptorValue

readDescriptorValue(descriptor: BLEDescriptor): Promise<BLEDescriptor>

client端从指定的server端描述符读取数据。使用Promise异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
descriptor BLEDescriptor 需要读取的描述符。

返回值:

类型 说明
Promise<BLEDescriptor> Promise对象,返回获取到的描述符对象,包含读取到的数据内容。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2901000 Read forbidden.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let bufferDesc = new ArrayBuffer(2);
let descV = new Uint8Array(bufferDesc);
descV[0] = 0; // 以Client Characteristic Configuration描述符为例,表示bit0、bit1均为0,notification和indication均不开启
let descriptor: ble.BLEDescriptor = {
    serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
    characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
    descriptorUuid: '00002902-0000-1000-8000-00805F9B34FB',
    descriptorValue: bufferDesc
};
try {
    let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
    device.readDescriptorValue(descriptor);
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

writeCharacteristicValue

writeCharacteristicValue(characteristic: BLECharacteristic, writeType: GattWriteType, callback: AsyncCallback<void>): void

client端向指定的server端特征值写入数据。使用Callback异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
characteristic BLECharacteristic 需要写入的特征值,包含写入的数据内容。
writeType GattWriteType 写入特征值的方式。
callback AsyncCallback<void> 回调函数。当写入成功,err为undefined,否则为错误对象。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2901001 Write forbidden.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let descriptors: Array<ble.BLEDescriptor> = [];
let bufferDesc = new ArrayBuffer(2);
let descV = new Uint8Array(bufferDesc);
descV[0] = 0; // 以Client Characteristic Configuration描述符为例,表示bit0、bit1均为0,notification和indication均不开启
let descriptor: ble.BLEDescriptor = {serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
  characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
  descriptorUuid: '00002902-0000-1000-8000-00805F9B34FB', descriptorValue: bufferDesc};
descriptors[0] = descriptor;

let bufferCCC = new ArrayBuffer(8);
let cccV = new Uint8Array(bufferCCC);
cccV[0] = 1;
let characteristic: ble.BLECharacteristic = {serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
  characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
  characteristicValue: bufferCCC, descriptors:descriptors};
function writeCharacteristicValueCallBack(code: BusinessError) {
    if (code != null) {
        return;
    }
    console.info('bluetooth writeCharacteristicValue success');
}
try {
    let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
    device.writeCharacteristicValue(characteristic, ble.GattWriteType.WRITE, writeCharacteristicValueCallBack);
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

writeCharacteristicValue

writeCharacteristicValue(characteristic: BLECharacteristic, writeType: GattWriteType): Promise<void>

client端向指定的server端特征值写入数据。使用Promise异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
characteristic BLECharacteristic 需要写入的特征值,包含写入的数据内容。
writeType GattWriteType 写入特征值的方式。

返回值:

类型 说明
Promise<void> Promise对象。无返回结果的Promise对象。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2901001 Write forbidden.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let descriptors: Array<ble.BLEDescriptor>  = [];
let bufferDesc = new ArrayBuffer(2);
let descV = new Uint8Array(bufferDesc);
descV[0] = 0; // 以Client Characteristic Configuration描述符为例,表示bit0、bit1均为0,notification和indication均不开启
let descriptor: ble.BLEDescriptor = {serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
  characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
  descriptorUuid: '00002902-0000-1000-8000-00805F9B34FB', descriptorValue: bufferDesc};
descriptors[0] = descriptor;

let bufferCCC = new ArrayBuffer(8);
let cccV = new Uint8Array(bufferCCC);
cccV[0] = 1;
let characteristic: ble.BLECharacteristic = {serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
  characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
  characteristicValue: bufferCCC, descriptors:descriptors};
try {
    let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
    device.writeCharacteristicValue(characteristic, ble.GattWriteType.WRITE);
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

writeDescriptorValue

writeDescriptorValue(descriptor: BLEDescriptor, callback: AsyncCallback<void>): void

client端向指定的server端描述符写入数据。使用Callback异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
descriptor BLEDescriptor 需要写入的描述符,包含写入的数据内容。
callback AsyncCallback<void> 回调函数。当写入成功,err为undefined,否则为错误对象。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2901001 Write forbidden.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let bufferDesc = new ArrayBuffer(2);
let descV = new Uint8Array(bufferDesc);
descV[0] = 0; // 以Client Characteristic Configuration描述符为例,表示bit0、bit1均为0,notification和indication均不开启
let descriptor: ble.BLEDescriptor = {
    serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
    characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
    descriptorUuid: '00002902-0000-1000-8000-00805F9B34FB',
    descriptorValue: bufferDesc
};
try {
    let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
    device.writeDescriptorValue(descriptor, (err: BusinessError) => {
        if (err) {
            console.error('notifyCharacteristicChanged callback failed');
        } else {
            console.info('notifyCharacteristicChanged callback successful');
        }
    });
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

writeDescriptorValue

writeDescriptorValue(descriptor: BLEDescriptor): Promise<void>

client端向指定的server端描述符写入数据。使用Promise异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
descriptor BLEDescriptor 需要写入的描述符,包含写入的数据内容。

返回值:

类型 说明
Promise<void> Promise对象。无返回结果的Promise对象。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2901001 Write forbidden.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let bufferDesc = new ArrayBuffer(2);
let descV = new Uint8Array(bufferDesc);
descV[0] = 0; // 以Client Characteristic Configuration描述符为例,表示bit0、bit1均为0,notification和indication均不开启
let descriptor: ble.BLEDescriptor = {
    serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
    characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
    descriptorUuid: '00002902-0000-1000-8000-00805F9B34FB',
    descriptorValue: bufferDesc
};
try {
    let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
    device.writeDescriptorValue(descriptor).then(() => {
        console.info('writeDescriptorValue promise success');
    });
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

getRssiValue

getRssiValue(callback: AsyncCallback<number>): void

client端获取GATT连接链路信号强度 (Received Signal Strength Indication, RSSI)。使用Callback异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
callback AsyncCallback<number> 回调函数。获取链路信号强度成功,err为undefined,data为获取到的信号强度值,单位:dBm;否则为错误对象。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
// callback
try {
    let gattClient: ble.GattClientDevice = ble.createGattClientDevice("XX:XX:XX:XX:XX:XX");
    gattClient.connect();
    let rssi = gattClient.getRssiValue((err: BusinessError, data: number)=> {
        console.info('rssi err ' + JSON.stringify(err));
        console.info('rssi value' + JSON.stringify(data));
    })
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

getRssiValue

getRssiValue(): Promise<number>

client端获取GATT连接链路信号强度 (Received Signal Strength Indication, RSSI)。使用Promise异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

返回值:

类型 说明
Promise<number> Promise对象。返回链路的信号强度,单位:dBm。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.
801 Capability not supported.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
// promise
try {
    let gattClient: ble.GattClientDevice = ble.createGattClientDevice("XX:XX:XX:XX:XX:XX");
    gattClient.getRssiValue().then((data: number) => {
        console.info('rssi' + JSON.stringify(data));
    })
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

setBLEMtuSize

setBLEMtuSize(mtu: number): void

client端同server端协商MTU(最大传输单元)大小。

  • 需先调用connect方法,等GATT profile连接成功后才能使用。
  • 通过on('BLEMtuChange'),订阅MTU协商结果。
  • 如果未协商,MTU大小默认为23字节。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
mtu number 需要协商的mtu大小,取值范围:[23, 517],单位:Byte。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
try {
    let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
    device.setBLEMtuSize(128);
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

setCharacteristicChangeNotification

setCharacteristicChangeNotification(characteristic: BLECharacteristic, enable: boolean, callback: AsyncCallback<void>): void

client端启用或者禁用接收server端特征值内容变更通知的能力。使用Callback异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
characteristic BLECharacteristic 需要管理的server端特征值。
enable boolean 是否启用接收server端特征值通知的能力。
true表示启用,false表示禁用。
callback AsyncCallback<void> 回调函数。当调用成功,err为undefined,否则为错误对象。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
// 创建descriptors。
let descriptors: Array<ble.BLEDescriptor> = [];
let arrayBuffer = new ArrayBuffer(2);
let descV = new Uint8Array(arrayBuffer);
descV[0] = 0; // 以Client Characteristic Configuration描述符为例,表示bit0、bit1均为0,notification和indication均不开启
let descriptor: ble.BLEDescriptor = {serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
  characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
  descriptorUuid: '00002902-0000-1000-8000-00805F9B34FB', descriptorValue: arrayBuffer};
descriptors[0] = descriptor;
let arrayBufferC = new ArrayBuffer(8);
let characteristic: ble.BLECharacteristic = {serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
  characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB', characteristicValue: arrayBufferC, descriptors:descriptors};
try {
    let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
    device.setCharacteristicChangeNotification(characteristic, false, (err: BusinessError) => {
        if (err) {
            console.error('notifyCharacteristicChanged callback failed');
        } else {
            console.info('notifyCharacteristicChanged callback successful');
        }
    });
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

setCharacteristicChangeNotification

setCharacteristicChangeNotification(characteristic: BLECharacteristic, enable: boolean): Promise<void>

client端启用或者禁用接收server端特征值内容变更通知的能力。使用Promise异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
characteristic BLECharacteristic 需要管理的server端特征值。
enable boolean 是否启用接收server端特征值通知的能力。
true表示启用,false表示禁用。

返回值:

类型 说明
Promise<void> Promise对象。无返回结果的Promise对象。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
// 创建descriptors。
let descriptors: Array<ble.BLEDescriptor> = [];
let arrayBuffer = new ArrayBuffer(2);
let descV = new Uint8Array(arrayBuffer);
descV[0] = 0; // 以Client Characteristic Configuration描述符为例,表示bit0、bit1均为0,notification和indication均不开启
let descriptor: ble.BLEDescriptor = {serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
  characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
  descriptorUuid: '00002902-0000-1000-8000-00805F9B34FB', descriptorValue: arrayBuffer};
descriptors[0] = descriptor;
let arrayBufferC = new ArrayBuffer(8);
let characteristic: ble.BLECharacteristic = {serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
  characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB', characteristicValue: arrayBufferC, descriptors:descriptors};
try {
  let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
  device.setCharacteristicChangeNotification(characteristic, false);
} catch (err) {
  console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

setCharacteristicChangeIndication

setCharacteristicChangeIndication(characteristic: BLECharacteristic, enable: boolean, callback: AsyncCallback<void>): void

client端启用或者禁用接收server端特征值内容变更指示的能力。使用Callback异步回调。

  • 需要先调用getServices,获取到server端所有支持的能力,且需包含指定的入参特征值UUID。
  • server端对应的特征值需包含标准协议定义的Client Characteristic Configuration描述符UUID(00002902-0000-1000-8000-00805f9b34fb),server端才能支持发送变更指示。
  • 若启用该能力,系统蓝牙服务会自动往server端写Client Characteristic Configuration描述符,启用server端的指示能力。
  • 若禁用该能力,系统蓝牙服务会自动往server端写Client Characteristic Configuration描述符,禁用server端的指示能力。
  • 通过on('BLECharacteristicChange')接收server端特征值内容变更指示。
  • 若client端收到server端特征值内容变更指示后,系统蓝牙服务会主动回复确认,应用无需关注。
  • 异步回调结果返回后,才能调用下一次读取或者写入操作,如readCharacteristicValuereadDescriptorValuewriteCharacteristicValuewriteDescriptorValuegetRssiValuesetCharacteristicChangeNotificationsetCharacteristicChangeIndication

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
characteristic BLECharacteristic 需要管理的server端特征值。
enable boolean 是否启用接收server端特征值指示的能力。
true表示启用,false表示禁用。
callback AsyncCallback<void> 回调函数。当调用成功,err为undefined,否则为错误对象。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
// 创建descriptors。
let descriptors: Array<ble.BLEDescriptor> = [];
let arrayBuffer = new ArrayBuffer(2);
let descV = new Uint8Array(arrayBuffer);
descV[0] = 0; // 以Client Characteristic Configuration描述符为例,表示bit0、bit1均为0,notification和indication均不开启
let descriptor: ble.BLEDescriptor = {serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
  characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
  descriptorUuid: '00002902-0000-1000-8000-00805F9B34FB', descriptorValue: arrayBuffer};
descriptors[0] = descriptor;
let arrayBufferC = new ArrayBuffer(8);
let characteristic: ble.BLECharacteristic = {serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
  characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB', characteristicValue: arrayBufferC, descriptors:descriptors};
try {
  let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
  device.setCharacteristicChangeIndication(characteristic, false, (err: BusinessError) => {
    if (err) {
      console.error('notifyCharacteristicChanged callback failed');
    } else {
      console.info('notifyCharacteristicChanged callback successful');
    }
  });
} catch (err) {
  console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

setCharacteristicChangeIndication

setCharacteristicChangeIndication(characteristic: BLECharacteristic, enable: boolean): Promise<void>

client端启用或者禁用接收server端特征值内容变更指示的能力。使用Callback异步回调。

  • 需要先调用getServices,获取到server端所有支持的能力,且需包含指定的入参特征值UUID。
  • server端对应的特征值需包含标准协议定义的Client Characteristic Configuration描述符UUID(00002902-0000-1000-8000-00805f9b34fb),server端才能支持发送变更指示。
  • 若启用该能力,系统蓝牙服务会自动往server端写Client Characteristic Configuration描述符,启用server端的指示能力。
  • 若禁用该能力,系统蓝牙服务会自动往server端写Client Characteristic Configuration描述符,禁用server端的指示能力。
  • 通过on('BLECharacteristicChange')接收server端特征值内容变更指示。
  • 若client端收到server端特征值内容变更指示后,系统蓝牙服务会主动回复确认,应用无需关注。
  • 异步回调结果返回后,才能调用下一次读取或者写入操作,如readCharacteristicValuereadDescriptorValuewriteCharacteristicValuewriteDescriptorValuegetRssiValuesetCharacteristicChangeNotificationsetCharacteristicChangeIndication

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
characteristic BLECharacteristic 需要管理的server端特征值。
enable boolean 是否启用接收server端特征值指示的能力。
true表示启用,false表示禁用。

返回值:

类型 说明
Promise<void> Promise对象。无返回结果的Promis对象。

错误码

以下错误码的详细介绍请参见通用错误码说明文档蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
// 创建descriptors。
let descriptors: Array<ble.BLEDescriptor> = [];
let arrayBuffer = new ArrayBuffer(2);
let descV = new Uint8Array(arrayBuffer);
descV[0] = 0; // 以Client Characteristic Configuration描述符为例,表示bit0、bit1均为0,notification和indication均不开启
let descriptor: ble.BLEDescriptor = {serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
  characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB',
  descriptorUuid: '00002902-0000-1000-8000-00805F9B34FB', descriptorValue: arrayBuffer};
descriptors[0] = descriptor;
let arrayBufferC = new ArrayBuffer(8);
let characteristic: ble.BLECharacteristic = {serviceUuid: '00001810-0000-1000-8000-00805F9B34FB',
  characteristicUuid: '00001820-0000-1000-8000-00805F9B34FB', characteristicValue: arrayBufferC, descriptors:descriptors};
try {
  let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
  device.setCharacteristicChangeIndication(characteristic, false);
} catch (err) {
  console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

on('BLECharacteristicChange')

on(type: 'BLECharacteristicChange', callback: Callback<BLECharacteristic>): void

client端订阅server端特征值变化事件。使用Callback异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'BLECharacteristicChange',表示server端特征值变化事件。
当client端收到server端特征值内容变更的通知或者指示时,触发该事件。
callback Callback<BLECharacteristic> 指定订阅的回调函数,会携带server端变化后的特征值内容。

错误码

以下错误码的详细介绍请参见通用错误码说明文档

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
function CharacteristicChange(characteristicChangeReq: ble.BLECharacteristic) {
    let serviceUuid: string = characteristicChangeReq.serviceUuid;
    let characteristicUuid: string = characteristicChangeReq.characteristicUuid;
    let value: Uint8Array = new Uint8Array(characteristicChangeReq.characteristicValue);
}
try {
    let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
    device.on('BLECharacteristicChange', CharacteristicChange);
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

off('BLECharacteristicChange')

off(type: 'BLECharacteristicChange', callback?: Callback<BLECharacteristic>): void

client端取消订阅server端特征值变化事件。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'BLECharacteristicChange',表示server端特征值变化事件。
callback Callback<BLECharacteristic> 指定取消订阅的回调函数通知。
若传参,则需与on('BLECharacteristicChange')中的回调函数一致;若无传参,则取消订阅该type对应的所有回调函数通知。

错误码

以下错误码的详细介绍请参见通用错误码说明文档

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
try {
    let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
    device.off('BLECharacteristicChange');
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

on('BLEConnectionStateChange')

on(type: 'BLEConnectionStateChange', callback: Callback<BLEConnectionChangeState>): void

client端订阅GATT profile协议的连接状态变化事件。使用Callback异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'BLEConnectionStateChange',表示连接状态变化事件。
client和server端之间的连接状态发生变化时,触发该事件。
当client端调用connectdisconnect时,可能引起连接状态生变化。
callback Callback<BLEConnectionChangeState> 指定订阅的回调函数,会携带连接状态信息。

错误码

以下错误码的详细介绍请参见通用错误码说明文档

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
function ConnectStateChanged(state: ble.BLEConnectionChangeState) {
    console.info('bluetooth connect state changed');
    let connectState: ble.ProfileConnectionState = state.state;
}
try {
    let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
    device.on('BLEConnectionStateChange', ConnectStateChanged);
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

off('BLEConnectionStateChange')

off(type: 'BLEConnectionStateChange', callback?: Callback<BLEConnectionChangeState>): void

client端取消订阅GATT profile协议的连接状态变化事件。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'BLEConnectionStateChange',表示连接状态变化事件。
callback Callback<BLEConnectionChangeState> 指定取消订阅的回调函数通知。
若传参,则需与on('BLEConnectionStateChange')中的回调函数一致;若无传参,则取消订阅该type对应的所有回调函数通知。

错误码

以下错误码的详细介绍请参见通用错误码说明文档

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
try {
    let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
    device.off('BLEConnectionStateChange');
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

on('BLEMtuChange')

on(type: 'BLEMtuChange', callback: Callback<number>): void

client端订阅MTU(最大传输单元)大小变更事件。使用Callback异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'BLEMtuChange',表示MTU大小变更事件。
当调用setBLEMtuSize方法,client端发起MTU大小协商后,会触发该事件。
callback Callback<number> 指定订阅的回调函数,会携带协商后的MTU大小。单位:Byte。

错误码

以下错误码的详细介绍请参见通用错误码说明文档

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
try {
    let gattClient: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
    gattClient.on('BLEMtuChange', (mtu: number) => {
      console.info('BLEMtuChange, mtu: ' + mtu);
    });
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

off('BLEMtuChange')

off(type: 'BLEMtuChange', callback?: Callback<number>): void

client端取消订阅MTU(最大传输单元)大小变更事件。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'BLEMtuChange',表示MTU大小变更事件。
callback Callback<number> 指定取消订阅的回调函数通知。若传参,则需与on('BLEMtuChange')中的回调函数一致;若无传参,则取消订阅该type对应的所有回调函数通知。

错误码

以下错误码的详细介绍请参见通用错误码说明文档

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
try {
    let device: ble.GattClientDevice = ble.createGattClientDevice('XX:XX:XX:XX:XX:XX');
    device.off('BLEMtuChange');
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

ble.createBleScanner15+

createBleScanner(): BleScanner

创建一个BleScanner实例对象,可用于发起或停止BLE扫描等流程。

原子化服务API: 从API version 15开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

返回值:

类型 说明
BleScanner 返回一个BleScanner的实例。

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
import { ble } from '@kit.ConnectivityKit';
let bleScanner: ble.BleScanner = ble.createBleScanner();
console.info('create bleScanner success');

BleScanner15+

BLE扫描类,提供了扫描相关的操作方法。

  • 使用该类的方法前,需通过createBleScanner方法构造该类的实例。
  • 通过创建不同的该类实例,可以管理多路不同的扫描流程。

startScan15+

startScan(filters: Array<ScanFilter>, options?: ScanOptions): Promise<void>

发起BLE扫描流程。使用Promise异步回调。

  • 该接口只能扫描BLE设备。
  • 扫描结果会通过on('BLEDeviceFind')的回调函数获取到。
  • 调用stopScan可以停止该方法开启的扫描流程。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 15开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
filters Array<ScanFilter> 扫描BLE广播的过滤条件集合,符合过滤条件的设备会被上报。
- 若该参数设置为null,将扫描所有可发现的周边BLE设备,但是不建议使用此方式,可能扫描到非预期设备,并增加功耗。
- 围栏模式下(ScanReportMode设置为FENCE_SENSITIVITY_LOW或FENCE_SENSITIVITY_HIGH时),该参数不可设置为null,需传入非空过滤器。
- 过滤器资源为所有应用共享,建议单个应用使用过滤器数量不超过3个,否则过滤器资源占满将导致开启扫描失败,返回2900009错误码。
options ScanOptions 扫描的配置参数。

返回值:

类型 说明
Promise<void> Promise对象。无返回结果的Promis对象。

错误码

以下错误码的详细介绍请参见通用错误码蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900009 Fails to start scan as it is out of hardware resources.
2900099 Operation failed.
2902050 Failed to start scan as Ble scan is already started by the app.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
import { ble } from '@kit.ConnectivityKit';
let bleScanner: ble.BleScanner = ble.createBleScanner();
function onReceiveEvent(scanReport: ble.ScanReport) {
    console.info('BLE scan device find result = '+ JSON.stringify(scanReport));
}
try {
    bleScanner.on("BLEDeviceFind", onReceiveEvent);
    let scanFilter: ble.ScanFilter = {
            deviceId:"XX:XX:XX:XX:XX:XX",
            name:"test",
            serviceUuid:"00001888-0000-1000-8000-00805f9b34fb"
        };
    let scanOptions: ble.ScanOptions = {
        interval: 500,
        dutyMode: ble.ScanDuty.SCAN_MODE_LOW_POWER,
        matchMode: ble.MatchMode.MATCH_MODE_AGGRESSIVE,
        reportMode: ble.ScanReportMode.FENCE_SENSITIVITY_LOW
    }
    bleScanner.startScan([scanFilter],scanOptions);
    console.info('startScan success');
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

stopScan15+

stopScan(): Promise<void>

停止正在进行的BLE扫描。

  • 停止的扫描是由startScan触发的。
  • 当应用不再需要扫描BLE设备时,需主动调用该方法停止扫描。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 15开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

返回值:

类型 说明
Promise<void> Promise对象。无返回结果的Promis对象。

错误码

以下错误码的详细介绍请参见通用错误码蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
801 Capability not supported.
2900001 Service stopped.
2900003 Bluetooth disabled.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
import { ble } from '@kit.ConnectivityKit';
let bleScanner: ble.BleScanner = ble.createBleScanner();
try {
    bleScanner.stopScan();
    console.info('startScan success');
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

on('BLEDeviceFind')15+

on(type: 'BLEDeviceFind', callback: Callback<ScanReport>): void

订阅BLE设备扫描结果上报事件。使用Callback异步回调。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 15开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'BLEDeviceFind',表示BLE设备扫描结果上报事件。
当调用startScan 后,开始BLE扫描,若扫描到BLE设备,触发该事件。
callback Callback<ScanReport> 指定订阅的回调函数,会携带扫描结果的集合。

错误码

以下错误码的详细介绍请参见通用错误码蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
import { ble } from '@kit.ConnectivityKit';
function onReceiveEvent(scanReport: ble.ScanReport) {
    console.info('bluetooth device find = '+ JSON.stringify(scanReport));
}
let bleScanner: ble.BleScanner = ble.createBleScanner();
try {
    bleScanner.on('BLEDeviceFind', onReceiveEvent);
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

off('BLEDeviceFind')15+

off(type: 'BLEDeviceFind', callback?: Callback<ScanReport>): void

取消订阅BLE设备扫描结果上报事件。

  • 若不再需要扫描BLE设备,调用stopScan方法后,需要调用此方法取消订阅。

需要权限:ohos.permission.ACCESS_BLUETOOTH

原子化服务API:从API version 15开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

参数:

参数名 类型 必填 说明
type string 事件回调类型,支持的事件为'BLEDeviceFind',表示BLE设备扫描结果上报事件。
callback Callback<ScanReport> 指定取消订阅的回调函数通知。
若传参,则需与on('BLEDeviceFind')中的回调函数一致;若无传参,则取消订阅该type对应的所有回调函数通知。

错误码

以下错误码的详细介绍请参见通用错误码蓝牙服务子系统错误码

错误码ID 错误信息
201 Permission denied.
401 Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.
801 Capability not supported.
2900099 Operation failed.

示例:

import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
import { ble } from '@kit.ConnectivityKit';
function onReceiveEvent(scanReport: ble.ScanReport) {
    console.info('bluetooth device find = '+ JSON.stringify(scanReport));
}
let bleScanner: ble.BleScanner = ble.createBleScanner();
try {
    bleScanner.on('BLEDeviceFind', onReceiveEvent);
    bleScanner.off('BLEDeviceFind', onReceiveEvent);
} catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}

GattService

GATT服务结构定义,可包含多个特征值BLECharacteristic和依赖的其他服务。

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
serviceUuid string 服务UUID,标识一个GATT服务。例如:00001888-0000-1000-8000-00805f9b34fb。
isPrimary boolean 是否是主服务。true表示是主服务,false表示是次要服务。
characteristics Array<BLECharacteristic> 当前服务包含的特征值列表。
includeServices Array<GattService> 当前服务依赖的其它服务。

BLECharacteristic

GATT特征值结构定义,是服务GattService的核心数据单元。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
serviceUuid string 特征值所属的服务UUID。例如:00001888-0000-1000-8000-00805f9b34fb。
原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。
characteristicUuid string 特征值UUID。例如:00002a11-0000-1000-8000-00805f9b34fb。
原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。
characteristicValue ArrayBuffer 特征值的数据内容。
原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。
descriptors Array<BLEDescriptor> 特征值包含的描述符列表。
原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。
properties GattProperties 特征值支持的属性。
原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。
characteristicValueHandle18+ number 特征值的唯一标识句柄。当server端BLE蓝牙设备提供了多个相同UUID特征值时,可以通过此句柄区分不同的特征值。
原子化服务API:从API version 18开始,该接口支持在原子化服务中使用。

BLEDescriptor

GATT描述符结构定义,是特征值BLECharacteristic的数据单元,用于描述特征值的附加信息和属性。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
serviceUuid string 特征值所属的服务UUID。例如:00001888-0000-1000-8000-00805f9b34fb。
原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。
characteristicUuid string 描述符所属的特征值UUID。例如:00002a11-0000-1000-8000-00805f9b34fb。
原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。
descriptorUuid string 描述符UUID。例如:00002902-0000-1000-8000-00805f9b34fb。
原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。
descriptorValue ArrayBuffer 描述符的数据内容。
原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。
descriptorHandle18+ number 描述符的唯一标识句柄。当server端BLE蓝牙设备提供了多个相同UUID描述符时,可以通过此句柄区分不同的描述符。
原子化服务API:从API version 18开始,该接口支持在原子化服务中使用。

NotifyCharacteristic

描述server端特征值发生变化时,server端发送特征值通知的参数结构。

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
serviceUuid string 特征值所属的服务UUID。例如:00001888-0000-1000-8000-00805f9b34fb。
characteristicUuid string 内容发生变化的特征值UUID。例如:00002a11-0000-1000-8000-00805f9b34fb。
characteristicValue ArrayBuffer 特征值对应的数据内容。
confirm boolean true表示发送的是指示,需要client端回复确认。false表示发送的是通知,不需要client端回复确认。

CharacteristicReadRequest

描述server端订阅client端读特征值请求事件后,接收到的事件参数结构。

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
deviceId string client端蓝牙设备地址。例如:"XX:XX:XX:XX:XX:XX"。
transId number client端读请求的标识符,server端回复时需填写相同的transId。
offset number client端读数据的偏移值。例如:k表示从第k个字节开始读。
server端回复响应时需填写相同的offset。
characteristicUuid string client端需要读取的特征值UUID。例如:00002a11-0000-1000-8000-00805f9b34fb。
serviceUuid string 特征值所属的服务UUID。例如:00001888-0000-1000-8000-00805f9b34fb。

CharacteristicWriteRequest

描述server端订阅client端写特征值请求事件后,接收到的事件参数结构。

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
deviceId string client端蓝牙设备地址。例如:"XX:XX:XX:XX:XX:XX"。
transId number client端写请求的标识符,server端回复时需填写相同的transId。
offset number client端写数据的偏移值。例如:k表示从第k个字节开始写。
server端回复时需填写相同的offset。
isPrepared boolean 收到client端写请求后,是否立即回复。
true表示稍后回复,false表示立即回复。
needRsp boolean 是否需要回复client端。
true表示需要回复,false表示不需要回复。
value ArrayBuffer client端需要给特征值写入的数据。
characteristicUuid string client端需要写入的特征值UUID。例如:00002a11-0000-1000-8000-00805f9b34fb。
serviceUuid string 特征值所属的服务UUID。例如:00001888-0000-1000-8000-00805f9b34fb。

DescriptorReadRequest

描述server端订阅client端读描述符请求事件后,接收到的事件参数结构。

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
deviceId string client端蓝牙设备地址。例如:"XX:XX:XX:XX:XX:XX"。
transId number client端读请求的标识符,server端回复时需填写相同的transId。
offset number client端读数据的偏移值。例如:k表示从第k个字节开始读。
server端回复响应时需填写相同的offset。
descriptorUuid string client端需要读取的描述符UUID。例如:00002902-0000-1000-8000-00805f9b34fb。
characteristicUuid string 描述符所属的特征值UUID。例如:00002a11-0000-1000-8000-00805f9b34fb。
serviceUuid string 特征值所属的服务UUID。例如:00001888-0000-1000-8000-00805f9b34fb。

DescriptorWriteRequest

描述server端订阅client端写描述符请求事件后,接收到的事件参数结构。

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
deviceId string client端蓝牙设备地址。例如:"XX:XX:XX:XX:XX:XX"。
transId number client端写请求的标识符,server端回复时需填写相同的transId。
offset number client端写数据的偏移值。例如:k表示从第k个字节开始写。
server端回复时需填写相同的offset。
isPrepared boolean 收到client端写请求后,是否立即回复。
true表示稍后回复,false表示立即回复。
needRsp boolean 是否需要回复client端。
true表示需要回复,false表示不需要回复。
value ArrayBuffer client端需要给描述符写入的数据。
descriptorUuid string client端需要写入的描述符UUID。例如:00002902-0000-1000-8000-00805f9b34fb。
characteristicUuid string 描述符所属的特征值UUID。例如:00002a11-0000-1000-8000-00805f9b34fb。
serviceUuid string 特征值所属的服务UUID。例如:00001888-0000-1000-8000-00805f9b34fb。

ServerResponse

描述server端回复client端读或者写请求的响应参数结构。

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
deviceId string client端蓝牙设备地址。例如:"XX:XX:XX:XX:XX:XX"。
transId number 收到client端请求的标识符,与订阅client端读或者写请求事件携带的transId保持一致。
status number 响应的状态,设置为0即可,表示正常。
offset number client端读或者写请求的数据偏移值,与订阅client端读或者写请求事件携带的offset保持一致。
value ArrayBuffer 回复的数据。

BLEConnectionChangeState

描述GATT profile协议连接状态。

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
deviceId string 对端蓝牙设备地址。例如:"XX:XX:XX:XX:XX:XX"。
state ProfileConnectionState GATT profile连接状态。

ScanResult

扫描到符合过滤条件的广播报文后,上报的扫描数据。

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
deviceId string 扫描到的蓝牙设备地址。例如:"XX:XX:XX:XX:XX:XX"。
基于信息安全考虑,此处获取的设备地址为虚拟MAC地址。
- 若和该设备地址配对成功后,该地址不会变更。
- 若取消配对该设备或蓝牙关闭后,再次重新发起扫描,该虚拟地址会变更。
- 若要持久化保存该地址,可使用access.addPersistentDeviceId方法。
rssi number 扫描到的设备信号强度,单位:dBm。
data ArrayBuffer 扫描到的设备发送的广播报文内容。
deviceName string 扫描到的设备名称。
connectable boolean 扫描到的设备是否可连接。true表示可连接,false表示不可连接。

AdvertiseSetting

描述BLE广播的发送参数。

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
interval number 广播发送间隔。
取值范围:[32, 16777215],单位:slot(时间槽),一个slot代表0.625毫秒,默认值为1600。
其中传统广播的最大值是16384。
txPower number 广播发送功率。取值范围:[-127, 1],单位:dBm,默认值为-7。
考虑到发送广播的性能和功耗,建议高档取值为1,中档取为-7,低档取值为-15。
connectable boolean 是否是可连接广播。true表示发送可连接广播,false表示发送不可连接广播,默认值为true。

AdvertiseData

描述BLE广播报文数据内容,也可以用作回复扫描请求的广播报文数据内容。当前只支持传统广播,因此报文最大长度为31个字节。若超出最大长度(31个字节)限制,会导致启动广播失败。若携带了所有参数,尤其是携带了蓝牙设备名称,需要注意广播报文长度。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
serviceUuids Array<string> 要携带的服务UUID。
原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。
manufactureData Array<ManufactureData> 要携带的制造商数据内容。
原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。
serviceData Array<ServiceData> 要携带的服务数据内容。
原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。
includeDeviceName boolean 是否携带蓝牙设备名称。true表示携带,false表示不携带,默认值为false。
原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。
includeTxPower18+ boolean 是否携带广播发送功率。
true表示携带广播发送功率,false表示不携带广播发送功率,默认值为false。
携带该值后,广播报文长度将多占用3个字节。
原子化服务API:从API version 18开始,该接口支持在原子化服务中使用。

AdvertisingParams11+

首次启动BLE广播时设置的参数。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
advertisingSettings11+ AdvertiseSetting 广播的发送参数。
advertisingData11+ AdvertiseData 需要发送的广播报文数据内容。
advertisingResponse11+ AdvertiseData 回复扫描请求的广播报文数据内容。
duration11+ number 发送广播的持续时间。取值范围:[1, 65535],单位:10ms。
如果未指定此参数或者将其设置为0,则会持续发送广播。

AdvertisingEnableParams11+

启动指定标识的BLE广播时设置的参数。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
advertisingId number 需要启动的广播标识。
duration number 发送广播的持续时间。取值范围:[1, 65535],单位:10ms。
如果未指定此参数或者将其设置为0,则会持续发送广播。

AdvertisingDisableParams11+

停止指定标识的BLE广播时设置的参数。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
advertisingId number 需要停止的广播标识。

AdvertisingStateChangeInfo11+

描述BLE广播启动、停止的状态信息。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
advertisingId number 首次启动广播时会分配该值,后续用于标识当前操作的广播。
state AdvertisingState 操作广播后,收到的BLE广播状态。

ManufactureData

描述BLE广播报文中制造商数据内容。

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
manufactureId number 制造商的标识,由蓝牙技术联盟分配。
manufactureValue ArrayBuffer 制造商特定的数据。

ServiceData

描述BLE广播报文中的服务数据内容。

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
serviceUuid string 服务UUID。
serviceValue ArrayBuffer 服务数据。

ScanFilter

扫描BLE广播的过滤条件,只有符合该条件的广播报文才会上报。

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
deviceId string 过滤该BLE设备地址的广播报文。例如:"XX:XX:XX:XX:XX:XX"。
name string 过滤该BLE设备名称的广播报文。
serviceUuid string 过滤包含该服务UUID的广播报文。例如:00001888-0000-1000-8000-00805f9b34fb。
serviceUuidMask string 搭配serviceUuid过滤器使用,可设置过滤部分服务UUID。例如:FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF。
serviceSolicitationUuid string 过滤包含该服务请求UUID的广播报文。例如:00001888-0000-1000-8000-00805F9B34FB。
serviceSolicitationUuidMask string 搭配serviceSolicitationUuid过滤器使用,可设置过滤部分服务请求UUID。例如:FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF。
serviceData ArrayBuffer 过滤包含该服务数据的广播报文。例如:[0x90,0x00,0xF1,0xF2]。
serviceDataMask ArrayBuffer 搭配serviceData过滤器使用,可设置过滤部分服务数据。例如:[0xFF,0xFF,0xFF,0xFF]。
manufactureId number 过滤包含该制造商标识符的广播报文。例如:0x0006。
manufactureData ArrayBuffer 搭配manufactureId过滤器使用,过滤包含该制造商数据的广播报文。例如:[0x1F,0x2F,0x3F]。
manufactureDataMask ArrayBuffer 搭配manufactureData过滤器使用,可设置过滤部分制造商数据。例如:[0xFF,0xFF,0xFF]。

ScanOptions

BLE扫描的配置参数。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
interval number 扫描结果上报的延迟时间,单位:ms,默认值为0。搭配ScanReportMode使用。
- 在常规或围栏扫描上报模式下,该值不生效,扫描到符合过滤条件的广播报文后立即上报。
- 在批量扫描上报模式下,该值生效,扫描到符合过滤条件的广播报文后,会存入缓存队列,延迟上报。若不设置该值或设置在[0, 5000)范围内,蓝牙子系统会默认设置延迟时间为5000ms。延迟时间内,若符合过滤条件的广播报文数量超过硬件缓存能力,蓝牙子系统会提前上报扫描结果。
原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。
dutyMode ScanDuty 扫描模式,默认值为SCAN_MODE_LOW_POWER。
原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。
matchMode MatchMode 硬件的过滤匹配模式,默认值为MATCH_MODE_AGGRESSIVE。
原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。
phyType12+ PhyType 扫描中使用的物理通道类型,默认值为PHY_LE_1M。
原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。
reportMode15+ ScanReportMode 扫描结果数据上报模式,默认值为NORMAL。
原子化服务API:从API version 15开始,该接口支持在原子化服务中使用。

GattProperties

描述GATT特征值支持的属性。决定了特征值内容和描述符如何被使用和访问。

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
write boolean 该特征值是否支持写入操作。
true表示支持,且被写入时需要回复对端设备,false表示不支持。默认值为true。
writeNoResponse boolean 该特征值是否支持写入操作。
true表示支持,且被写入时无需回复对端设备,false表示不支持。默认值为true。
read boolean 该特征值是否支持读取操作。
true表示支持,false表示不支持。默认值为true。
notify boolean 该特征值是否支持主动向对端设备通知特征值内容。
true表示支持,且对端设备不需要回复确认,false表示不支持。默认值为false。
indicate boolean 该特征值是否支持向对端设备指示特征值内容。
true表示支持,对端设备需要回复确认,false表示不支持。默认值为false。

GattWriteType

枚举,写入特征值的方式(不同的取值,对端蓝牙设备的表现不一样)。

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 说明
WRITE 1 写入特征值后,对端蓝牙设备需要回复确认。
WRITE_NO_RESPONSE 2 写入特征值后,对端蓝牙设备不需要回复。

ScanDuty

枚举,扫描模式,表示不同的扫描性能和功耗情况。

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 说明
SCAN_MODE_LOW_POWER 0 低功耗模式,扫描性能较低,功耗也较低。
SCAN_MODE_BALANCED 1 均衡模式,平衡扫描性能和功耗。
SCAN_MODE_LOW_LATENCY 2 低延迟模式,扫描性能较高,但功耗也较高。

MatchMode

枚举,硬件过滤匹配模式。

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 说明
MATCH_MODE_AGGRESSIVE 1 当广播报文信号强度较低或者短时间内广播报文的发送次数较少时,可以更快地上报。
MATCH_MODE_STICKY 2 广播报文信号强度较高或者短时间内广播报文的发送次数较多时,才会上报。

AdvertisingState11+

枚举,不同操作对应的BLE广播状态。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 说明
STARTED11+ 1 调用startAdvertising方法后,广播首次启动成功,且会分配相关资源。
ENABLED11+ 2 调用enableAdvertising方法后,广播启动成功。
DISABLED11+ 3 调用disableAdvertising方法后,广播停止成功。
STOPPED11+ 4 调用stopAdvertising方法后,广播停止成功,且会释放首次启动广播时分配的相关资源。

PhyType12+

枚举,指定扫描过程中接收BLE广播报文的物理通道。

原子化服务API:从API version 12开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 说明
PHY_LE_1M12+ 1 使用1M PHY类型扫描。
PHY_LE_ALL_SUPPORTED12+ 255 使用所有支持的PHY类型扫描。

ScanReport15+

上报的扫描数据。

原子化服务API:从API version 15开始,该接口支持在原子化服务中使用。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 类型 只读 可选 说明
reportType ScanReportType 扫描结果上报类型。
scanResult Array<ScanResult> 扫描到符合过滤条件的BLE广播报文后,上报的扫描数据。

ScanReportType15+

枚举,扫描结果上报类型。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 说明
ON_FOUND 1 扫描到符合过滤条件的BLE广播报文时,触发上报,可搭配常规和围栏上报模式使用。
原子化服务API:从API version 15开始,该接口支持在原子化服务中使用。
ON_LOST 2 当不再扫描到符合过滤条件的BLE广播报文时,触发上报,只搭配围栏上报模式使用。
原子化服务API:从API version 15开始,该接口支持在原子化服务中使用
ON_BATCH19+ 3 扫描到符合过滤条件的BLE广播报文时,以ScanOptions中的interval字段为周期触发上报。
原子化服务API:从API version 19开始,该接口支持在原子化服务中使用

ScanReportMode15+

枚举,扫描结果上报模式。

系统能力:SystemCapability.Communication.Bluetooth.Core

名称 说明
NORMAL 1 常规扫描上报模式,扫描到符合过滤条件的BLE广播报文后就会立刻上报。
原子化服务API:从API version 15开始,该接口支持在原子化服务中使用。
BATCH19+ 2 批量扫描上报模式。
- 该模式可通过降低蓝牙芯片上报扫描结果频率,使系统更长时间地保持在休眠状态,从而降低整机功耗。
- 该模式下,扫描到符合过滤条件的BLE广播报文后不会立刻上报,需要缓存一段时间(ScanOptions中的interval字段)后上报。
原子化服务API:从API version 19开始,该接口支持在原子化服务中使用。
FENCE_SENSITIVITY_LOW18+ 10 低灵敏度围栏上报模式。
- 围栏模式表示只在广播进入或离开围栏时上报。
- 扫描到的广播信号强度高且广播数量多时,可进入低灵敏度围栏。
- 首次扫描到广播即进入围栏,触发一次上报。
- 一段时间内扫描不到广播即离开围栏,触发一次上报。
原子化服务API:从API version 18开始,该接口支持在原子化服务中使用。
FENCE_SENSITIVITY_HIGH18+ 11 高灵敏度围栏上报模式。
- 围栏模式表示只在广播进入或离开围栏时上报。
- 扫描到的广播信号强度低且广播数量少时,可进入高灵敏度围栏。
- 首次扫描到广播即进入围栏,触发一次上报。
- 一段时间内扫描不到广播即离开围栏,触发一次上报。
原子化服务API:从API version 18开始,该接口支持在原子化服务中使用。