无长时任务的应用退到后台不允许进行蓝牙扫描。
约束
应用如果不主动停止发起的扫描,系统会在应用退到后台时强制停止扫描,回到前台后恢复扫描。
示例
import { UIAbility } from '@kit.AbilityKit';
import { ble } from '@kit.ConnectivityKit';
export default class EntryAbility extends UIAbility {
// ...
onForeground(): void {
//在前台时按业务所需启动Ble扫描和广播
ble.startBLEScan([scanFilter], scanOptions);
ble.startAdvertising(setting, advData, advResponse);
}
onBackground(): void {
//退到后台停止Ble扫描和广播,和申请时对应
ble.stopBLEScan();
ble.stopAdvertising();
}
}
蓝牙实战
广播与扫描开发
简介
广播与扫描,主要提供了蓝牙设备的开启广播、关闭广播、开启扫描、关闭扫描方法,通过广播和扫描发现对端蓝牙设备,实现低功耗的通信。
场景介绍
主要场景有:
- 开启、关闭广播
- 开启、关闭扫描
接口说明
具体接口说明如下表。
接口名 | 功能描述 |
---|---|
startBLEScan() | 发起BLE扫描流程。 |
stopBLEScan() | 停止BLE扫描流程。 |
startAdvertising() | 开始发送BLE广播。 |
disableAdvertising() | 临时停止BLE广播。 |
enableAdvertising() | 临时启动BLE广播。 |
stopAdvertising() | 停止发送BLE广播。 |
on(type: ‘advertisingStateChange’) | 订阅BLE广播状态。 |
off(type: ‘advertisingStateChange’) | 取消订阅BLE广播状态。 |
on(type: ‘BLEDeviceFind’) | 订阅BLE设备发现上报事件。 |
off(type: ‘BLEDeviceFind’) | 取消订阅BLE设备发现上报事件。 |
主要场景开发步骤
开启、关闭广播
-
import需要的ble模块。
-
开启设备的蓝牙。
-
需要SystemCapability.Communication.Bluetooth.Core系统能力。
-
开启广播,对端设备扫描该广播。
-
关闭广播。
-
示例代码:
import { ble } from '@kit.ConnectivityKit';
import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
const TAG: string = 'BleAdvertisingManager';
export class BleAdvertisingManager {
private advHandle: number = 0xFF; // default invalid value
// 1 订阅广播状态
public onAdvertisingStateChange() {
try {
ble.on('advertisingStateChange', (data: ble.AdvertisingStateChangeInfo) => {
console.info(TAG, 'bluetooth advertising state = ' + JSON.stringify(data));
AppStorage.setOrCreate('advertiserState', data.state);
});
} catch (err) {
console.error(TAG, 'errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}
}
// 2 首次启动广播
public async startAdvertising()