GHOST系统之家 - Windows系统光盘下载网站!
当前位置:GHOST系统之家>系统教程 > OpenHarmony BLE蓝牙连接

OpenHarmony BLE蓝牙连接

来源:Ghost系统之家浏览:时间:2023-04-26 09:05:35

​​想了解更多关于开源的内容,请访问:​​

​​51CTO开源基础软件社区​​

​​https://ost.51cto.com​​

OpenHarmony BLE蓝牙设备连接

1、简介

OpenHarmony蓝牙模块提供了基础的传统蓝牙能力以及BLE的扫描、广播等功能,这里将介绍如何通过OpenHarmony提供的@ohos.bluetooth (蓝牙接口)打开当前设备的蓝牙,关闭蓝牙,以及连接BLE蓝牙设备。

2、设备与环境

设备:九联s905l3a机顶盒、开鸿智谷学生卡BLE蓝牙设备系统:OpenHarmony 3.2 beta2SDK:9

演示视频:​​OpenHarmony BLE蓝牙设备连接​​

3、逻辑流程

OpenHarmony BLE蓝牙连接-开源基础软件社区

首先机顶盒在开始的时候获取蓝牙相关权限,然后通过OpenHarmony提供的蓝牙接口打开蓝牙,接着订阅发现BLE设备发现事件,然后通过OpenHarmony提供的蓝牙接口开启BLE设备扫描,当发现到了BLE蓝牙设备后,进行上报,BLE设备发现事件触发,获取到来自BLE设备的广播信息包,然后进行BLE蓝牙连接。

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文件中添加相关权限:

"requestPermissions": [{"name": "ohos.permission.USE_BLUETOOTH","reason": "$string:grant_use_bluetooth","usedScene": {"abilities": ["MainAbility"],"when": "inuse"}},{"name": "ohos.permission.DISCOVER_BLUETOOTH","reason": "$string:grant_discovery_bluetooth","usedScene": {"abilities": ["MainAbility"],"when": "inuse"}},{"name": "ohos.permission.LOCATION","reason": "$string:grant_location","usedScene": {"abilities": ["MainAbility"],"when": "inuse"}},{"name": "ohos.permission.MANAGE_BLUETOOTH","reason": "$string:grant_manage_bluetooth","usedScene": {"abilities": ["MainAbility"],"when": "inuse"}}]

(2)打开设备的蓝牙

首先,通过调用bluetooth.getState()蓝牙接口来获取当前设备蓝牙是否打开,并设置蓝牙开关的标识位isOn。

async aboutToAppear() {// 等待获取蓝牙权限await globalThis.abilityContext.requestPermissionsFromUser(['ohos.permission.USE_BLUETOOTH', 'ohos.permission.DISCOVER_BLUETOOTH', 'ohos.permission.LOCATION', 'ohos.permission.MANAGE_BLUETOOTH'])logger.info(TAG, `获取权限grantPermission,requestPermissionsFromUser,PermissionRequestResult`)// 获取蓝牙状态let state = bluetooth.getState()// 判断当前设备蓝牙是否打开if (state === bluetooth.BluetoothState.STATE_ON) {this.isOn = true}if (state === bluetooth.BluetoothState.STATE_OFF) {this.isOn = false}}

如果当前设备蓝牙未打开,则通过调用bluetooth.enableBluetooth()蓝牙接口来打开蓝牙。

// 打开蓝牙函数initBluetooth() { this.enable = bluetooth.enableBluetooth()// 判断蓝牙是否成功打开if(this.enable==true){prompt.showToast({message: 'Open bluetooth' + this.enable,duration: 2000,});}}

(3)注册发现BLE设备监听器

在设备打开蓝牙之后,通过调用bluetooth.BLE.on('BLEDeviceFind')蓝牙接口来订阅BLE设备发现上报事件。该接口参数如下:

OpenHarmony BLE蓝牙连接-开源基础软件社区

通过注册发现BLE设备监听器,可以得到发现设备的集合,BLE设备的广播包、地址、信号强度rssi,在这里发现获取连接BLE设备名字的接口getDeviceName无法成功调用,所以自己通过解析广播包来获取设备名字。

// 订阅BLE设备发现上报事件// 获取到的data包括BLE设备的广播包、地址、信号强度rssibluetooth.BLE.on('BLEDeviceFind', (data) => {logger.info(TAG, `enter on bluetoothBLEDeviceFind`)logger.info("rgytl 开始扫描设备地址!1")if (data !== null && data.length > 0) {logger.info("rgytl 开始扫描设备地址!2")if (this.discoveryBleList.indexOf(data[0]) === -1) {// 把发现的设备地址存入列表this.discoveryBleList.push(data[0].deviceId)logger.info("rgytl ---- discoveryBleList = "+JSON.stringify(this.discoveryBleList))// 读取广播包,解析广播包,得到设备名字,并存入设备列表var i = 0;var x = data[0].data[i]var y = data[0].data[i + 1]while(y!=0x09 && i+x+2(4)开启BLE设备扫描

在完成订阅BLE设备发现上报事件后,通过调用bluetooth.BLE.startBLEScan接口去开启BLE设备扫描,通过该接口,可以对扫描BLE设备进行过滤,可以过滤的参数有:BLE设备的地址、名字、以及服务的UUID等。

OpenHarmony BLE蓝牙连接-开源基础软件社区

在这里,我设置只扫描包含我BLE设备名字的BLE设备,这样子就不会说扫描到一大堆其他的BLE设备,影响使用,只需要开启一次扫描和订阅一次BLE设备发现上报事件就可以了,使用的时候只要没有关闭,就不需要重复调用。

// 设置蓝牙BLE扫描模式(根据名字扫描)bluetooth.BLE.startBLEScan([{ deviceId: null, name: "ble slave test", serviceUuid: null }],{interval: 0,dutyMode: bluetooth.ScanDuty.SCAN_MODE_LOW_POWER,matchMode: bluetooth.MatchMode.MATCH_MODE_AGGRESSIVE,})

(5)连接BLE设备

在扫描到BLE设备之后,可以通过on(‘BLEConnectionStateChange’)来订阅获取BLE设备的连接状态变化事件,在使用该接口之前,要先通过bluetooth.BLE.createGattClientDevice('XX:XX:XX:XX:XX:XX')接口创建一个可使用的GattClientDevice实例。

OpenHarmony BLE蓝牙连接-开源基础软件社区

// 订阅BEL状态变化if(this.BleOnflag){// 只创建一个GattClient对象this.BleOnflag = falsethis.BLEDevice = bluetooth.BLE.createGattClientDevice(item);// 订阅获取BLE设备的连接状态变化事件this.BLEDevice.on('BLEConnectionStateChange', (data) => {console.log('bluetooth connectState state changed');let connectState = data.state;// 根据不通的连接状态,提示不同的信息if(JSON.stringify(connectState) == 0){logger.info(`connectState = ${JSON.stringify(connectState)},断开连接`)prompt.showToast({message: '断开连接',duration: 2000,}); } else if(JSON.stringify(connectState) == 2){logger.info(`connectState = ${JSON.stringify(connectState)},连接成功`)prompt.showToast({message: '连接成功',duration: 2000,}); } else if(JSON.stringify(connectState) == 1){logger.info(`connectState = ${JSON.stringify(connectState)},正在连接`) } else {logger.info(`connectState = ${JSON.stringify(connectState)},正在断连`) } logger.info(`connectState = ${JSON.stringify(connectState)}`); })}

在前面通过bluetooth.BLE.createGattClientDevice(item)创建一个GattClientDevice实例BLEDevice后,我们可以通过该实例去调用connect()方法连接BLE设备。注意,GattClientDevice实例 只需要创建一个就可以。

OpenHarmony BLE蓝牙连接-开源基础软件社区

// 连接蓝牙let BLEConnect = this.BLEDevice.connect()// 如果连接成功,则把BLE设备存入连接成功列表if(BLEConnect){this.deviceBleList.push(item)}

(6)结尾处理

当不连接BLE设备的时候,要记得关闭BLE设备扫描,取消订阅设备发现事件。

取消BLE设备连接,通过之前创建的GattClientDevice实例BLEDevice调用disconnect()方法断开连接BLE设备。

Button("断开").alignSelf(ItemAlign.Center).onClick(() => {AlertDialog.show({title: $r('app.string.disconnect'),message: '此操作将会断开该设备的连接',primaryButton: {value: $r('app.string.cancel'),action: () => {}},secondaryButton: {value: $r('app.string.confirm'),action: () => {// 断开连接BLE设备let BLEdisConnect = this.BLEDevice.disconnect()if(BLEdisConnect){logger.info(`connectState BLEdisConnect = ${JSON.stringify(BLEdisConnect)},断开连接`)// 移出BLE设备连接列表this.deviceBleList.pop(item)}}}})})

在断开连接、关闭蓝牙之后,可以通过off(‘connectStateChange’)取消订阅BLE连接状态变化事件、bluetooth.BLE.stopBLEScan停止BLE扫描、以及bluetooth.BLE.off(‘BLEDeviceFind’)取消订阅BLE设备发现上报事件,最后通过bluetooth.disableBluetooth()关闭蓝牙。

.onChange((isOn: boolean) => { if (isOn) { this.isOn = true this.initBluetooth() } else { this.isOn = false bluetooth.BLE.off('BLEDeviceFind',()=>{ logger.info("rgytl 取消BLE设备发现订阅!") }) bluetooth.BLE.stopBLEScan() this.disable = bluetooth.disableBluetooth() this.discoveryList = [] this.BleInfo = [] this.BleRssi = [] if(this.disable==true){ prompt.showToast({ message: 'Close bluetooth' + this.disable, duration: 2000, }); } } })
5、参考文档

​​OpenAtom OpenHarmony 蓝牙​​

​​应用权限列表​​

​​OpenHarmony Gitee 蓝牙​​

文章相关附件可以点击下面的原文链接前往下载

​​https://ost.51cto.com/resource/2700​​

​​想了解更多关于开源的内容,请访问:​​

​​51CTO开源基础软件社区​​

​​https://ost.51cto.com​​

标签:蓝牙鸿蒙

推荐系统

  • 电脑公司Ghost Win8.1 x32 精选纯净版2022年7月(免激活) ISO镜像高速下载

    电脑公司Ghost Win8.1 x32 精选纯净版2022年7月(免激活) ISO镜像高速下载

    语言:中文版系统大小:2.98GB系统类型:Win8

    电脑公司Ghost Win8.1x32位纯净版V2022年7月版本集成了自2022流行的各种硬件驱动,首次进入系统即全部硬件已安装完毕。电脑公司Ghost Win8.1x32位纯净版具有更安全、更稳定、更人性化等特点。集成最常用的装机软件,精心挑选的系统维护工具,加上绿茶独有

  • 微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载

    微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载

    语言:中文版系统大小:5.13GB系统类型:Win11

    微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Win11 64位 Office办公版(免费)优化  1、保留 Edge浏览器。  2、隐藏“操作中心”托盘图标。  3、保留常用组件(微软商店,计算器,图片查看器等)。  5、关闭天气资讯。 

  • Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载

    Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载

    语言:中文版系统大小:4.75GB系统类型:Win11

    Ghost Win11 21H2是微软在系统方面技术积累雄厚深耕多年,Ghost Win11 21H2系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Ghost Win11 21H2是微软最新发布的KB5019961补丁升级而来的最新版的21H2系统,以Windows 11 21H2 22000 1219 专业版为基础进行优化,保持原汁原味,系统流畅稳定,保留常用组件

  • windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载

    windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载

    语言:中文版系统大小:5.31GB系统类型:Win11

    windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载,微软win11发布快大半年了,其中做了很多次补丁和修复一些BUG,比之前的版本有一些功能上的调整,目前已经升级到最新版本的镜像系统,并且优化了自动激活,永久使用。windows11中文版镜像国内镜像下载地址微软windows11正式版镜像 介绍:1、对函数算法进行了一定程度的简化和优化

  • 微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载

    微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载

    语言:中文版系统大小:5.31GB系统类型:Win11

    微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载,微软2022年正式推出了win11系统,很多人迫不及待的要体验,本站提供了最新版的微软Windows11正式版系统下载,微软windows11正式版镜像 是一款功能超级强大的装机系统,是微软方面全新推出的装机系统,这款系统可以通过pe直接的完成安装,对此系统感兴趣,想要使用的用户们就快来下载

  • 微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件

    微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件

    语言:中文版系统大小:0MB系统类型:Win11

    微软Ghost win11 正式版镜像文件是一款由微软方面推出的优秀全新装机系统,这款系统的新功能非常多,用户们能够在这里体验到最富有人性化的设计等,且全新的柔软界面,看起来非常的舒服~微软Ghost win11 正式版镜像文件介绍:1、与各种硬件设备兼容。 更好地完成用户安装并有效地使用。2、稳定使用蓝屏,系统不再兼容,更能享受无缝的系统服务。3、为

  • 雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载

    雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载

    语言:中文版系统大小:4.75GB系统类型:

    雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的雨林木风品牌,其系统口碑得到许多人认可,积累了广大的用户群体,雨林木风是一款稳定流畅的系统,一直以来都以用户为中心,是由雨林木风团队推出的Windows11国内镜像版,基于国内用户的习惯,做了系统性能的优化,采用了新的系统

  • 雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO

    雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO

    语言:中文版系统大小:5.91GB系统类型:Win7

    雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO在系统方面技术积累雄厚深耕多年,加固了系统安全策略,雨林木风win7旗舰版系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。win7 32位旗舰装机版 v2019 05能够帮助用户们进行系统的一键安装、快速装机等,系统中的内容全面,能够为广大用户