HarmonyOS学习路之开发篇—网络与连接(蓝牙开发 一)

简介: 蓝牙是短距离无线通信的一种方式,支持蓝牙的两个设备必须配对后才能通信。HarmonyOS蓝牙主要分为传统蓝牙和低功耗蓝牙(通常称为BLE,Bluetooth Low Energy)。传统蓝牙指的是蓝牙版本3.0以下的蓝牙,低功耗蓝牙指的是蓝牙版本4.0以上的蓝牙。

蓝牙是短距离无线通信的一种方式,支持蓝牙的两个设备必须配对后才能通信。HarmonyOS蓝牙主要分为传统蓝牙和低功耗蓝牙(通常称为BLE,Bluetooth Low Energy)。传统蓝牙指的是蓝牙版本3.0以下的蓝牙,低功耗蓝牙指的是蓝牙版本4.0以上的蓝牙。


当前蓝牙的配对方式有两种:蓝牙协议2.0以下支持PIN码(Personal Identification Number,个人识别码)配对,蓝牙协议2.1以上支持简单配对。


传统蓝牙

HarmonyOS传统蓝牙提供的功能有:



传统蓝牙本机管理:打开和关闭蓝牙、设置和获取本机蓝牙名称、扫描和取消扫描周边蓝牙设备、获取本机蓝牙profile对其他设备的连接状态、获取本机蓝牙已配对的蓝牙设备列表。

传统蓝牙远端设备操作:查询远端蓝牙设备名称和MAC地址、设备类型和配对状态,以及向远端蓝牙设备发起配对。

BLE

BLE设备交互时会分为不同的角色:


中心设备和外围设备:中心设备负责扫描外围设备、发现广播。外围设备负责发送广播。

GATT(Generic Attribute Profile,通用属性配置文件)服务端与GATT客户端:两台设备建立连接后,其中一台作为GATT服务端,另一台作为GATT客户端。通常发送广播的外围设备作为服务端,负责扫描的中心设备作为客户端。

HarmonyOS低功耗蓝牙提供的功能有:


BLE扫描和广播:根据指定状态获取外围设备、启动或停止BLE扫描、广播。

BLE中心设备与外围设备进行数据交互:BLE外围设备和中心设备建立GATT连接后,中心设备可以查询外围设备支持的各种数据,向外围设备发起数据请求,并向其写入特征值数据。

BLE外围设备数据管理:BLE外围设备作为服务端,可以接收来自中心设备(客户端)的GATT连接请求,应答来自中心设备的特征值内容读取和写入请求,并向中心设备提供数据。同时外围设备还可以主动向中心设备发送数据。

约束与限制

调用蓝牙的打开接口需要ohos.permission.USE_BLUETOOTH权限,调用蓝牙扫描接口需要ohos.permission.LOCATION权限和ohos.permission.DISCOVER_BLUETOOTH权限。


传统蓝牙本机管理

场景介绍

传统蓝牙本机管理主要是针对蓝牙本机的基本操作,包括打开和关闭蓝牙、设置和获取本机蓝牙名称、扫描和取消扫描周边蓝牙设备、获取本机蓝牙profile对其他设备的连接状态、获取本机蓝牙已配对的蓝牙设备列表。


接口说明

表1 蓝牙本机管理类BluetoothHost的主要接口

image.png

打开蓝牙

1.调用BluetoothHost的getDefaultHost(Context context)接口,获取BluetoothHost实例,管理本机蓝牙操作。

2.调用enableBt()接口,打开蓝牙。

3.调用getBtState(),查询蓝牙是否打开。

// 获取蓝牙本机管理对象
BluetoothHost bluetoothHost = BluetoothHost.getDefaultHost(context);
// 调用打开接口
bluetoothHost.enableBt();
// 调用获取蓝牙开关状态接口
int state = bluetoothHost.getBtState(); 

蓝牙扫描

1.开始蓝牙扫描前要先注册广播BluetoothRemoteDevice.EVENT_DEVICE_DISCOVERED。

2.调用startBtDiscovery()接口开始进行扫描外围设备。

3.如果想要获取扫描到的设备,必须在注册广播时继承实现CommonEventSubscriber类的

传统蓝牙远端设备操作

场景介绍

//开始扫描
bluetoothHost.startBtDiscovery();
//接收系统广播
public class MyCommonEventSubscriber extends CommonEventSubscriber {
    @Override
    public void onReceiveEvent(CommonEventData data) {
        if (data == null) {
            return;
        }
        Intent info = data.getIntent();
        if (info == null) {
            return;
        }
        //获取系统广播的action
        String action = info.getAction();
        //判断是否为扫描到设备的广播
        if (BluetoothRemoteDevice.EVENT_DEVICE_DISCOVERED.equals(action)) {    
            IntentParams myParam = info.getParams();    
            BluetoothRemoteDevice device = (BluetoothRemoteDevice) myParam.getParam(BluetoothRemoteDevice.REMOTE_DEVICE_PARAM_DEVICE);
        }
    }
}

传统蓝牙远端管理操作主要是针对远端蓝牙设备的基本操作,包括获取远端蓝牙设备地址、类型、名称和配对状态,以及向远端设备发起配对。


接口说明

表1 蓝牙远端设备管理类BluetoothRemoteDevice的主要接口


image.png

开发步骤

1.调用BluetoothHost的getDefaultHost(Context context)接口,获取BluetoothHost实例,管理本机蓝牙操作。

2.调用enableBt()接口,打开蓝牙。

3.调用startBtDiscovery(),扫描设备。

4.调用startPair(),发起配对。

5.调用getDeviceAddr(),获取远端蓝牙设备地址。

调用getDeviceAddr​(),获取远端蓝牙设备地址。
// 获取蓝牙本机管理对象
BluetoothHost bluetoothHost = BluetoothHost.getDefaultHost(context);
// 调用打开接口
bluetoothHost.enableBt();
// 调用扫描接口
bluetoothHost.startBtDiscovery(); 
// 设置界面会显示出扫描结果列表,点击蓝牙设备去配对
BluetoothRemoteDevice device = bluetoothHost.getRemoteDev(TEST_ADDRESS);
device.startPair();
// 调用接口获取远端蓝牙设备地址
String deviceAddr = device.getDeviceAddr();
目录
打赏
0
1
1
0
2
分享
相关文章
【HarmonyOS 5】鸿蒙组件&模板服务详解 - 助力高效开发的利器
在移动应用开发领域,效率与质量始终是开发者追求的核心目标。鸿蒙系统作为新兴的操作系统,为开发者提供了丰富且强大的开发资源,其中鸿蒙组件&模板服务更是成为开发者快速构建高质量应用的得力助手。
93 0
HarmonyOS NEXT仓颉开发语言实战案例:外卖App
仓颉语言实战分享,教你如何用仓颉开发外卖App界面。内容包括页面布局、导航栏自定义、搜索框实现、列表模块构建等,附完整代码示例。轻松掌握Scroll、List等组件使用技巧,提升HarmonyOS应用开发能力。
HarmonyOS NEXT仓颉开发语言实战案例:健身App
本期分享一个健身App首页的布局实现,顶部采用Stack容器实现重叠背景与偏移效果,列表部分使用List结合Scroll实现可滚动内容。代码结构清晰,适合学习HarmonyOS布局技巧。
HarmonyOS NEXT仓颉开发语言实战案例:银行App
仓颉语言银行App项目分享,页面布局采用List容器,实现沉浸式体验与模块化设计。顶部资产模块结合Stack与Row布局,背景图与内容分离,代码清晰易懂;功能按钮部分通过负边距实现上移效果,圆角仅保留顶部;热门推荐使用header组件,结构更规范。整体代码风格与ArkTS相似,但细节更灵活,适合金融类应用开发。
鸿蒙开发:基于最新API,如何实现组件化运行
手动只是让大家了解切换的原理,在实际开发中,可不推荐手动,下篇文章,我们将通过脚本或者插件,快速实现组件化模块之间的切换,实现独立运行,敬请期待!
101 0
鸿蒙开发:基于最新API,如何实现组件化运行
鸿蒙开发:资讯项目实战之项目初始化搭建
目前来说,我们的资讯项目只是往前迈了很小的一步,仅仅实现了项目创建,步虽小,但概念性的知识很多,这也是这个项目的初衷,让大家不仅仅可以掌握日常的技术开发,也能让大家理解实际的项目开发知识。
鸿蒙开发:资讯项目实战之项目初始化搭建
鸿蒙5开发宝藏案例分享---优化应用时延问题
鸿蒙性能优化指南来了!从UI渲染到数据库操作,6大实战案例助你提升应用流畅度。布局层级优化、数据加载并发、数据库查询提速、相机资源延迟释放、手势识别灵敏调整及转场动画精调,全面覆盖性能痛点。附赠性能自检清单,帮助开发者高效定位问题,让应用运行如飞!来自华为官方文档的精华内容,建议收藏并反复研读,共同探讨更多优化技巧。
鸿蒙5开发宝藏案例分享---Swiper组件性能优化实战
本文分享了鸿蒙系统中Swiper组件的性能优化技巧,包括:1) 使用`LazyForEach`替代`ForEach`实现懒加载,显著降低内存占用;2) 通过`cachedCount`精准控制缓存数量,平衡流畅度与内存消耗;3) 利用`onAnimationStart`在抛滑时提前加载资源,提升构建效率;4) 添加`@Reusable`装饰器复用组件实例,减少创建开销。实际应用后,图库页帧率从45fps提升至58fps,效果显著。适合处理复杂列表或轮播场景,欢迎交流经验!
|
19天前
|
跟老卫学HarmonyOS开发:ArkTS关系型数据库开发
本节以“账本”为例,使用关系型数据库接口实现账单的增、删、改、查操作。通过创建ArkTSRdb应用,演示如何操作RdbStore进行数据管理,并结合界面按钮实现交互功能。
60 0
跟老卫学HarmonyOS开发:ArkTS关系型数据库开发
HarmonyOS NEXT仓颉开发语言实战案例:图片预览器
本文介绍了如何使用仓颉语言实现图片放大预览器。通过弹窗组件`CustomDialogController`与`Swiper`容器结合,实现全屏图片浏览效果,支持多图切换与点击关闭功能,适配动态广场场景下的图片预览需求。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问