• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 广播与扫描开发指导
2
3## 简介
4广播与扫描,主要提供了蓝牙设备的开启广播、关闭广播、开启扫描、关闭扫描方法,通过广播和扫描发现对端蓝牙设备,实现低功耗的通信。
5
6## 场景介绍
7主要场景有:
8
9- 开启、关闭广播
10- 开启、关闭扫描
11
12## 接口说明
13
14完整的 JS API 说明以及实例代码请参考:[BLE 接口](../../reference/apis-connectivity-kit/js-apis-bluetooth-ble.md)。
15
16具体接口说明如下表。
17
18| 接口名                             | 功能描述                                                                       |
19| ---------------------------------- | ------------------------------------------------------------------------------ |
20| startBLEScan()                     | 发起BLE扫描流程。                                                               |
21| stopBLEScan()                      | 停止BLE扫描流程。                                                                |
22| startAdvertising()                 | 开始发送BLE广播。                                                                |
23| stopAdvertising()                  | 停止发送BLE广播。                                                                |
24| on(type: 'advertisingStateChange') | 订阅BLE广播状态。                                                                |
25| off(type: 'advertisingStateChange')| 取消订阅BLE广播状态。                                                            |
26| on(type: 'BLEDeviceFind')          | 订阅BLE设备发现上报事件。                                                        |
27| off(type: 'BLEDeviceFind')         | 取消订阅BLE设备发现上报事件。                                                     |
28
29## 主要场景开发步骤
30
31### 开启、关闭广播
321. import需要的ble模块。
332. 开启设备的蓝牙。
343. 需要SystemCapability.Communication.Bluetooth.Core系统能力。
354. 开启广播,对端设备扫描该广播。
365. 关闭广播。
376. 示例代码:
38
39```ts
40import ble from '@ohos.bluetooth.ble';
41import { BusinessError } from '@ohos.base';
42
43// 开启广播
44let manufactureValueBuffer = new Uint8Array(4);
45manufactureValueBuffer[0] = 1;
46manufactureValueBuffer[1] = 2;
47manufactureValueBuffer[2] = 3;
48manufactureValueBuffer[3] = 4;
49let serviceValueBuffer = new Uint8Array(4);
50serviceValueBuffer[0] = 5;
51serviceValueBuffer[1] = 6;
52serviceValueBuffer[2] = 7;
53serviceValueBuffer[3] = 8;
54let setting: ble.AdvertiseSetting = {
55  interval: 150,
56  txPower: 0,
57  connectable: true
58};
59let manufactureDataUnit: ble.ManufactureData = {
60  manufactureId: 4567,
61  manufactureValue: manufactureValueBuffer.buffer
62};
63let serviceDataUnit: ble.ServiceData = {
64  serviceUuid: "00001888-0000-1000-8000-00805f9b34fb",
65  serviceValue: serviceValueBuffer.buffer
66};
67let advData: ble.AdvertiseData = {
68  serviceUuids: ["00001888-0000-1000-8000-00805f9b34fb"],
69  manufactureData: [manufactureDataUnit],
70  serviceData: [serviceDataUnit],
71  includeDeviceName: false // 表示是否携带设备名,可选参数。注意带上设备名时广播包长度不能超出31个字节。
72};
73let advResponse: ble.AdvertiseData = {
74  serviceUuids: ["00001888-0000-1000-8000-00805f9b34fb"],
75  manufactureData: [manufactureDataUnit],
76  serviceData: [serviceDataUnit]
77};
78
79ble.startAdvertising(setting, advData, advResponse);
80console.info('startAdvertising success');
81
82// 关闭广播
83ble.stopAdvertising();
84console.info('stopAdvertising success');
85```
86
877. 错误码请参见[蓝牙服务子系统错误码](../../reference/apis-connectivity-kit/errorcode-bluetoothManager.md)。
888. 如何验证:执行开启广播的用例代码,记录日志“startAdvertising success”,并且使用另外一部手机安装nrfConnect软件开启扫描,如果扫描到该广播,广播内容“Manufacturer data的值为:0x01020304,Service Data的值为:0x05060708”,表示开启广播成功。关闭广播后,扫描不到该内容的广播。
89
90### 开启、关闭扫描
911. import需要的ble模块。
922. 开启设备的蓝牙。
933. 需要SystemCapability.Communication.Bluetooth.Core系统能力。
944. 对端设备开启广播。
955. 本端设备开启扫描,获取扫描结果。
966. 关闭扫描。
977. 示例代码:
98
99```ts
100import ble from '@ohos.bluetooth.ble';
101import { BusinessError } from '@ohos.base';
102
103// 开启扫描
104let scanFilter: ble.ScanFilter = {
105  name: 'Jackistang'
106};
107let scanOptions: ble.ScanOptions = {
108  interval: 500,
109  dutyMode: ble.ScanDuty.SCAN_MODE_LOW_POWER,
110  matchMode: ble.MatchMode.MATCH_MODE_AGGRESSIVE
111}
112ble.startBLEScan([scanFilter], scanOptions);
113console.info('startBleScan success')
114
115// 接收扫描结果
116ble.on('BLEDeviceFind', (data) => {
117  if (data.length > 0) {
118    console.info('BLE scan result = ' + data[0].deviceName);
119  }
120});
121
122// 关闭扫描
123ble.stopBLEScan();
124console.info('stopBleScan success');
125```
126
1278. 错误码请参见[蓝牙服务子系统错误码](../../reference/apis-connectivity-kit/errorcode-bluetoothManager.md)。
1289. 如何验证:使用另外一部手机安装nrfConnect软件并且配置好广播,设备名称修改为“Jackistang”,开启广播。然后测试手机开启扫描,大概每隔0.5秒记录日志“BLE scan result =  = Jackistang”,则表示开启扫描成功。关闭扫描后,不会再有该记录日志产生。