更新时间:2025-12-16 06:32:34下载pdf
鸿蒙上蓝牙设备暂时只支持两种蓝牙类型的配网方案:
| 蓝牙类型 | 说明 | 设备应用示例 |
|---|---|---|
| 蓝牙单点 | 蓝牙设备与手机一对一连接单点设备(蓝牙或低功耗蓝牙) | 体脂秤、手环、温控器、电动牙刷、门锁等 |
| 双模设备 | 一些多协议设备也会使用到蓝牙技术,例如同时具备 Wi-Fi 能力和蓝牙能力的 双模设备 | 蓝牙 Mesh 网关、IPC 设备、新版多协议 Wi-Fi 设备等 |
蓝牙部分所具备的功能如下:
设备配网
申请蓝牙权限
需要申请权限 ohos.permission.ACCESS_BLUETOOTH。关于如何配置和申请权限,具体操作请参考 声明权限 和 向用户申请授权。
API 说明,请参考 设备配网。
实现扫描结果监听器
scanListener: TSmartScannerListener = {
onDeviceFound: (scanResult: TSmartScannerResult): void => {
// 实现相关逻辑
}
};
构造扫描实例
// 使用扫描监听器创建扫描实例
this.scanner = new TSmartScannerBuilder(this.scanListener);
// 设置扫描超时时间和扫描方式(蓝牙扫描模式)
this.scanner.setScanTimeout(120000).addScanMode(TSmartScanMode.SCAN_MODE_BLE);
开始扫描
this.scanner.startScan();
停止扫描
this.scanner.stopScan();
根据扫描结果,来决定进行蓝牙配网或者双模配网
TSmartScannerResult
| 名称 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| uniqueId | string | 是 | 设备唯一标记 |
| productId | string | 是 | 产品 ID |
| deviceType | TSmartDeviceType | 是 | 设备类型 |
| name | string | 是 | 设备名称, name通过网络请求获取,请求失败时会默认为New Device |
| icon | string | 是 | 设备图标的URL, 通过网络请求获取,请求失败时默认空字符串 |
| scannedBleDevice | Device | 否 | 当设备类型是蓝牙或双模设备时有值 |
TSmartDeviceType
export enum TSmartDeviceType {
BLE, // 蓝牙设备
WIFI_BLE, // 双模设备
WIRED // 有线设备
}
实现配网监听器中的方法
activatorListener: ITSmartActivatorListener = {
onActiveSetpAndError: (step: TSmartActivatorStep, error?: Error, device?: TSmartDeviceModel) => {
// 实现相关逻辑
},
onActiveSuccess: (deviceModel: TSmartDeviceModel) => {
// 处理配网成功的逻辑,例如更新UI,跳转到下一个页面
},
};
创建配网实例
如果是单点设备(scanResult.deviceType == TSmartDeviceType.BLE),蓝牙单点配网实例的创建方式:
const activatorBuilder = TSmartActivator.buildBleActivatorBuilder(homeId, 120000,listener)
this.activator = TSmartActivator.createActivator(activatorBuilder);
// 添加待配网的设备
this.activator.appendDevice(scanResult.scannedBleDevice)
如果是双模设备 (scanResult.deviceType == TSmartDeviceType.WIFI_BLE),双模配网实例的创建方式:
const activatorBuilder = TSmartActivator.buildBleWifiActivatorBuilder(
homeId,
this.ssid,
this.password,
120000,
listener,
)
this.activator = TSmartActivator.createActivator(activatorBuilder);
// 添加待配网的设备
this.activator.appendDevice(scanResult.scannedBleDevice)
调用开始配网
this.activator.startActive()
调用停止配网
this.activator.stopActive()
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈