OpenHarmony BLE蓝牙连接 原创 精华
OpenHarmony BLE蓝牙设备连接
1. 简介
OpenHarmony蓝牙模块提供了基础的传统蓝牙能力以及BLE的扫描、广播等功能,这里将介绍如何通过OpenHarmony提供的@ohos.bluetooth (蓝牙接口)打开当前设备的蓝牙,关闭蓝牙,以及连接BLE蓝牙设备。
文末有项目代码
2.设备与环境
设备:九联s905l3a机顶盒、开鸿智谷学生卡BLE蓝牙设备
系统:OpenHarmony 3.2 beta2
SDK:9
演示视频:OpenHarmony BLE蓝牙设备连接
3.逻辑流程
首先机顶盒在开始的时候获取蓝牙相关权限,然后通过OpenHarmony提供的蓝牙接口打开蓝牙,接着订阅发现BLE设备发现事件,然后通过OpenHarmony提供的蓝牙接口开启BLE设备扫描,当发现到了BLE蓝牙设备后,进行上报,BLE设备发现事件触发,获取到来自BLE设备的广播信息包,然后进行BLE蓝牙连接。
4.实现过程
4.1 获取蓝牙相关权限
在使用蓝牙接口之前,首先要让设备获取一下权限:
- ohos.permission.USE_BLUETOOTH // 允许应用查看蓝牙的配置。
- ohos.permission.DISCOVER_BLUETOOTH // 允许应用配置本地蓝牙,查找远端设备且与之配对连接。
- ohos.permission.LOCATION // 允许应用获取设备位置信息。
- ohos.permission.MANAGE_BLUETOOTH // 允许应用配对蓝牙设备,并对设备的电话簿或消息进行访问。
打开DevEco Studio 3.1.0.200,创建新的Stage项目,在项目中的module.json文件中添加相关权限:
4.2 打开设备的蓝牙
首先,通过调用 bluetooth.getState() 蓝牙接口来获取当前设备蓝牙是否打开,并设置蓝牙开关的标识位 isOn。
如果当前设备蓝牙未打开,则通过调用 bluetooth.enableBluetooth() 蓝牙接口来打开蓝牙。
4.3 注册发现BLE设备监听器
在设备打开蓝牙之后,通过调用 bluetooth.BLE.on('BLEDeviceFind') 蓝牙接口来订阅BLE设备发现上报事件。该接口参数如下:
通过注册发现BLE设备监听器,可以得到发现设备的集合,BLE设备的广播包、地址、信号强度rssi,在这里发现获取连接BLE设备名字的接口 getDeviceName 无法成功调用,所以自己通过解析广播包来获取设备名字。
4.4 开启BLE设备扫描
在完成订阅BLE设备发现上报事件后,通过调用 bluetooth.BLE.startBLEScan 接口去开启BLE设备扫描,通过该接口,可以对扫描BLE设备进行过滤,可以过滤的参数有:BLE设备的地址、名字、以及服务的UUID等。
在这里,我设置只扫描包含我BLE设备名字的BLE设备,这样子就不会说扫描到一大堆其他的BLE设备,影响使用,只需要开启一次扫描和订阅一次BLE设备发现上报事件就可以了,使用的时候只要没有关闭,就不需要重复调用。
4.5 连接BLE设备
在扫描到BLE设备之后,可以通过 on(‘BLEConnectionStateChange’) 来订阅获取BLE设备的连接状态变化事件,在使用该接口之前,要先通过 bluetooth.BLE.createGattClientDevice('XX:XX:XX:XX:XX:XX') 接口创建一个可使用的GattClientDevice实例。
在前面通过 bluetooth.BLE.createGattClientDevice(item) 创建一个GattClientDevice实例 BLEDevice 后,我们可以通过该实例去调用 connect() 方法连接BLE设备。注意,GattClientDevice实例 只需要创建一个就可以。
4.6 结尾处理
当不连接BLE设备的时候,要记得关闭BLE设备扫描,取消订阅设备发现事件。
取消BLE设备连接,通过之前创建的GattClientDevice实例 BLEDevice 调用 disconnect() 方法断开连接BLE设备。
在断开连接、关闭蓝牙之后,可以通过 off(‘connectStateChange’) 取消订阅BLE连接状态变化事件、bluetooth.BLE.stopBLEScan 停止BLE扫描、以及 bluetooth.BLE.off(‘BLEDeviceFind’) 取消订阅BLE设备发现上报事件,最后通过 bluetooth.disableBluetooth() 关闭蓝牙。
5.参考文档
应用权限列表
很完整的蓝牙连接教程
不错的学习笔记