news 2026/5/19 3:34:06

鸿蒙学习实战之路-蓝牙设置完全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
鸿蒙学习实战之路-蓝牙设置完全指南

鸿蒙学习实战之路-蓝牙设置完全指南

最近好多朋友问我:“西兰花啊,我想在鸿蒙应用里搞个蓝牙功能,咋开头啊?” 害,这问题可问对人了!蓝牙这玩意儿就像咱们厨房的抽油烟机,要用的时候得打开,用完了还得记得关,不然费电不说还可能影响其他功能~

今天这篇,我就手把手带你把鸿蒙应用的蓝牙开关玩明白,从权限申请到状态监听再到开关控制,全程不踩坑~


一、先配齐蓝牙开发的"锅碗瓢盆"

要搞蓝牙开发,第一步当然是配齐必要的权限和依赖。就像做饭前得先把锅碗瓢盆准备好一样~

1. 申请蓝牙权限

首先得在module.json5文件里声明蓝牙权限,不然应用连碰都碰不到蓝牙功能:

{"module":{"requestPermissions":[{"name":"ohos.permission.ACCESS_BLUETOOTH"}]}}

🥦西兰花警告
权限可不能忘啊!我有个朋友第一次搞蓝牙开发,折腾了一下午代码,结果发现是忘了加权限,白忙活一场!

2. 导入蓝牙API模块

接下来咱们得把蓝牙相关的API模块导入进来,就像做饭前得把食材拿出来一样:

import{access}from'@kit.ConnectivityKit';import{BusinessError}from'@kit.BasicServicesKit';

二、装个"蓝牙状态监视器"

要想控制蓝牙开关,首先得知道它现在是开着还是关着。咱们可以订阅蓝牙的状态变化事件,就像装了个监视器一样,蓝牙状态一有变化咱们就能知道~

1. 定义状态变化回调函数

咱们先写个函数,专门用来处理蓝牙状态变化:

// 定义蓝牙开关状态变化的回调函数functionon蓝牙状态变化(状态:access.BluetoothState){let状态描述='';switch(状态){caseaccess.BluetoothState.STATE_OFF:状态描述='蓝牙已关闭';break;caseaccess.BluetoothState.STATE_TURNING_ON:状态描述='蓝牙正在开启...';break;caseaccess.BluetoothState.STATE_ON:状态描述='蓝牙已开启,可以使用了!';break;caseaccess.BluetoothState.STATE_TURNING_OFF:状态描述='蓝牙正在关闭...';break;caseaccess.BluetoothState.STATE_BLE_TURNING_ON:状态描述='BLE正在开启...';break;caseaccess.BluetoothState.STATE_BLE_ON:状态描述='BLE已开启';break;caseaccess.BluetoothState.STATE_BLE_TURNING_OFF:状态描述='BLE正在关闭...';break;default:状态描述='未知状态';break;}console.info('当前蓝牙状态: '+状态描述);}

2. 订阅状态变化事件

有了回调函数,咱们得把它和蓝牙状态变化事件绑起来,这样才能收到通知:

try{// 发起订阅,蓝牙状态一变化就会调用on蓝牙状态变化函数access.on('stateChange',on蓝牙状态变化);}catch(err){console.error('订阅蓝牙状态失败: '+(errasBusinessError).code+', '+(errasBusinessError).message);}

🥦西兰花小贴士
蓝牙状态有好几种,其中最重要的是STATE_OFF(已关闭)和STATE_ON(已开启)。只有在STATE_ON状态下,咱们才能使用蓝牙的其他功能哦~


三、蓝牙开关"手动挡"操作

现在监视器装好了,咱们就可以手动控制蓝牙开关了。就像开车一样,想快就踩油门,想停就踩刹车~

1. 开启蓝牙

当咱们需要使用蓝牙功能时,可以先检查蓝牙状态,如果是关闭的就把它打开:

try{// 主动获取蓝牙当前的开关状态let当前状态=access.getState();if(当前状态==access.BluetoothState.STATE_OFF){// 若蓝牙是关闭的,则主动开启蓝牙access.enableBluetooth();}}catch(err){console.error('开启蓝牙失败: '+(errasBusinessError).code+', '+(errasBusinessError).message);}

当咱们调用enableBluetooth()时,系统会弹出一个对话框,问用户是否同意开启蓝牙,就像这样:

2. 关闭蓝牙

用完蓝牙后,咱们应该主动把它关掉,就像用完抽油烟机要记得关一样,这样能节省设备电量:

try{// 主动获取蓝牙当前的开关状态let当前状态=access.getState();if(当前状态==access.BluetoothState.STATE_ON){// 若蓝牙是开启的,则主动关闭蓝牙access.disableBluetooth();}}catch(err){console.error('关闭蓝牙失败: '+(errasBusinessError).code+', '+(errasBusinessError).message);}

同样地,调用disableBluetooth()时,系统也会弹出对话框让用户确认:


四、把蓝牙操作封装成"工具箱"

为了方便使用,咱们可以把刚才的所有功能封装成一个蓝牙管理器类,就像把常用工具都放进一个工具箱里一样,想用的时候直接拿出来就行:

import{access}from'@kit.ConnectivityKit';import{BusinessError}from'@kit.BasicServicesKit';exportclass蓝牙管理器{// 蓝牙状态变化回调函数状态变化回调=(状态:access.BluetoothState)=>{let状态描述='';switch(状态){caseaccess.BluetoothState.STATE_OFF:状态描述='蓝牙已关闭';break;caseaccess.BluetoothState.STATE_TURNING_ON:状态描述='蓝牙正在开启...';break;caseaccess.BluetoothState.STATE_ON:状态描述='蓝牙已开启,可以使用了!';break;caseaccess.BluetoothState.STATE_TURNING_OFF:状态描述='蓝牙正在关闭...';break;caseaccess.BluetoothState.STATE_BLE_TURNING_ON:状态描述='BLE正在开启...';break;caseaccess.BluetoothState.STATE_BLE_ON:状态描述='BLE已开启';break;caseaccess.BluetoothState.STATE_BLE_TURNING_OFF:状态描述='BLE正在关闭...';break;default:状态描述='未知状态';break;}console.info('当前蓝牙状态: '+状态描述);};// 初始化蓝牙管理器public初始化(){try{// 订阅蓝牙状态变化access.on('stateChange',this.状态变化回调);}catch(err){console.error('订阅蓝牙状态失败: '+(errasBusinessError).code+', '+(errasBusinessError).message);}}// 开启蓝牙public开启蓝牙(){try{// 主动获取蓝牙当前的开关状态let当前状态=access.getState();if(当前状态==access.BluetoothState.STATE_OFF){// 若蓝牙是关闭的,则主动开启蓝牙access.enableBluetooth();}}catch(err){console.error('开启蓝牙失败: '+(errasBusinessError).code+', '+(errasBusinessError).message);}}// 关闭蓝牙public关闭蓝牙(){try{// 主动获取蓝牙当前的开关状态let当前状态=access.getState();if(当前状态==access.BluetoothState.STATE_ON){// 若蓝牙是开启的,则主动关闭蓝牙access.disableBluetooth();}}catch(err){console.error('关闭蓝牙失败: '+(errasBusinessError).code+', '+(errasBusinessError).message);}}// 销毁蓝牙管理器public销毁(){try{// 取消订阅蓝牙状态变化access.off('stateChange',this.状态变化回调);}catch(err){console.error('取消订阅蓝牙状态失败: '+(errasBusinessError).code+', '+(errasBusinessError).message);}}}// 创建一个蓝牙管理器实例const蓝牙工具=new蓝牙管理器();exportdefault蓝牙工具;

现在咱们就可以方便地使用这个蓝牙管理器了:

import蓝牙工具from'./BluetoothManager';// 初始化蓝牙蓝牙工具.初始化();// 需要使用蓝牙时开启蓝牙工具.开启蓝牙();// 用完蓝牙后关闭蓝牙工具.关闭蓝牙();// 页面销毁时记得销毁管理器蓝牙工具.销毁();

🥦西兰花小贴士
封装成工具类的好处是可以重复使用,而且代码结构更清晰。就像家里的工具箱一样,下次要用的时候直接拿出来就行,不用再重新找工具~


五、总结一下

今天咱们把鸿蒙应用的蓝牙设置功能彻底搞明白了:

  1. 权限申请:在module.json5里加ohos.permission.ACCESS_BLUETOOTH权限
  2. API导入:导入accessBusinessError模块
  3. 状态监听:订阅stateChange事件,实时获取蓝牙状态
  4. 开关控制:用enableBluetooth()disableBluetooth()控制蓝牙开关
  5. 封装工具类:把所有功能封装成蓝牙管理器,方便使用和维护

📚 推荐资料:

  • 鸿蒙蓝牙开发官方文档
  • 蓝牙API参考文档
  • 权限声明官方指南

我是盐焗西兰花,
不教理论,只给你能跑的代码和避坑指南。
下期见!🥦

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 18:16:56

Ultimate ASI Loader使用教程:轻松实现游戏MOD自动加载

Ultimate ASI Loader使用教程:轻松实现游戏MOD自动加载 【免费下载链接】Ultimate-ASI-Loader ASI Loader is the tool that loads custom libraries with the file extension .asi into any game process. 项目地址: https://gitcode.com/gh_mirrors/ul/Ultimate…

作者头像 李华
网站建设 2026/5/12 1:12:37

如何高效配置Venera漫画源:解锁海量资源的完整指南

如何高效配置Venera漫画源:解锁海量资源的完整指南 【免费下载链接】venera A comic app 项目地址: https://gitcode.com/gh_mirrors/ve/venera Venera是一款功能强大的跨平台漫画阅读应用,支持通过JavaScript配置文件从多种网络源获取漫画内容。…

作者头像 李华
网站建设 2026/5/16 1:51:40

中英翻译服务数据安全:隐私保护实施方案

中英翻译服务数据安全:隐私保护实施方案 📌 引言:AI 智能中英翻译服务的隐私挑战 随着人工智能技术的普及,AI 智能中英翻译服务已成为跨语言沟通的重要工具。尤其在企业协作、学术研究和内容本地化场景中,用户频繁上传…

作者头像 李华
网站建设 2026/5/2 16:18:45

实时渲染方案:Z-Image-Turbo结合游戏引擎的实践

实时渲染方案:Z-Image-Turbo结合游戏引擎的实践 为什么需要Z-Image-Turbo? 作为一名技术美术师,我经常需要在游戏引擎中实现动态场景生成。传统的手工制作方式效率低下,而AI图像生成技术为这个问题提供了新的解决方案。Z-Image-Tu…

作者头像 李华
网站建设 2026/5/15 14:47:57

高效数据标注:Z-Image-Turbo生成训练样本技巧

高效数据标注:Z-Image-Turbo生成训练样本技巧 计算机视觉工程师常常面临标注数据不足的问题,而手动标注又耗时耗力。Z-Image-Turbo作为一款高效的图像生成工具,可以帮助我们快速扩充训练集。本文将分享如何利用Z-Image-Turbo生成高质量、多样…

作者头像 李华
网站建设 2026/5/15 23:26:40

血液细胞智能检测:BCCD数据集实战解析

血液细胞智能检测:BCCD数据集实战解析 【免费下载链接】BCCD_Dataset BCCD (Blood Cell Count and Detection) Dataset is a small-scale dataset for blood cells detection. 项目地址: https://gitcode.com/gh_mirrors/bc/BCCD_Dataset 想要快速搭建血液细…

作者头像 李华