鸿蒙学习实战之路-蓝牙设置完全指南
最近好多朋友问我:"西兰花啊,我想在鸿蒙应用里搞个蓝牙功能,咋开头啊?" 害,这问题可问对人了!蓝牙这玩意儿就像咱们厨房的抽油烟机,要用的时候得打开,用完了还得记得关,不然费电不说还可能影响其他功能~
今天这篇,我就手把手带你把鸿蒙应用的蓝牙开关玩明白,从权限申请到状态监听再到开关控制,全程不踩坑~
一、先配齐蓝牙开发的"锅碗瓢盆"
要搞蓝牙开发,第一步当然是配齐必要的权限和依赖。就像做饭前得先把锅碗瓢盆准备好一样~
1. 申请蓝牙权限
首先得在 module.json5 文件里声明蓝牙权限,不然应用连碰都碰不到蓝牙功能:
json
{
"module": {
"requestPermissions": [
{
"name": "ohos.permission.ACCESS_BLUETOOTH"
}
]
}
}
🥦 西兰花警告 :
权限可不能忘啊!我有个朋友第一次搞蓝牙开发,折腾了一下午代码,结果发现是忘了加权限,白忙活一场!
2. 导入蓝牙API模块
接下来咱们得把蓝牙相关的API模块导入进来,就像做饭前得把食材拿出来一样:
ts
import { access } from '@kit.ConnectivityKit';
import { BusinessError } from '@kit.BasicServicesKit';
二、装个"蓝牙状态监视器"
要想控制蓝牙开关,首先得知道它现在是开着还是关着。咱们可以订阅蓝牙的状态变化事件,就像装了个监视器一样,蓝牙状态一有变化咱们就能知道~
1. 定义状态变化回调函数
咱们先写个函数,专门用来处理蓝牙状态变化:
ts
// 定义蓝牙开关状态变化的回调函数
function on蓝牙状态变化(状态: access.BluetoothState) {
let 状态描述 = '';
switch (状态) {
case access.BluetoothState.STATE_OFF:
状态描述 = '蓝牙已关闭';
break;
case access.BluetoothState.STATE_TURNING_ON:
状态描述 = '蓝牙正在开启...';
break;
case access.BluetoothState.STATE_ON:
状态描述 = '蓝牙已开启,可以使用了!';
break;
case access.BluetoothState.STATE_TURNING_OFF:
状态描述 = '蓝牙正在关闭...';
break;
case access.BluetoothState.STATE_BLE_TURNING_ON:
状态描述 = 'BLE正在开启...';
break;
case access.BluetoothState.STATE_BLE_ON:
状态描述 = 'BLE已开启';
break;
case access.BluetoothState.STATE_BLE_TURNING_OFF:
状态描述 = 'BLE正在关闭...';
break;
default:
状态描述 = '未知状态';
break;
}
console.info('当前蓝牙状态: ' + 状态描述);
}
2. 订阅状态变化事件
有了回调函数,咱们得把它和蓝牙状态变化事件绑起来,这样才能收到通知:
ts
try {
// 发起订阅,蓝牙状态一变化就会调用on蓝牙状态变化函数
access.on('stateChange', on蓝牙状态变化);
} catch (err) {
console.error('订阅蓝牙状态失败: ' + (err as BusinessError).code + ', ' + (err as BusinessError).message);
}
🥦 西兰花小贴士 :
蓝牙状态有好几种,其中最重要的是 STATE_OFF(已关闭)和 STATE_ON(已开启)。只有在 STATE_ON 状态下,咱们才能使用蓝牙的其他功能哦~
三、蓝牙开关"手动挡"操作
现在监视器装好了,咱们就可以手动控制蓝牙开关了。就像开车一样,想快就踩油门,想停就踩刹车~
1. 开启蓝牙
当咱们需要使用蓝牙功能时,可以先检查蓝牙状态,如果是关闭的就把它打开:
ts
try {
// 主动获取蓝牙当前的开关状态
let 当前状态 = access.getState();
if (当前状态 == access.BluetoothState.STATE_OFF) {
// 若蓝牙是关闭的,则主动开启蓝牙
access.enableBluetooth();
}
} catch (err) {
console.error('开启蓝牙失败: ' + (err as BusinessError).code + ', ' + (err as BusinessError).message);
}
当咱们调用 enableBluetooth() 时,系统会弹出一个对话框,问用户是否同意开启蓝牙,就像这样:

2. 关闭蓝牙
用完蓝牙后,咱们应该主动把它关掉,就像用完抽油烟机要记得关一样,这样能节省设备电量:
ts
try {
// 主动获取蓝牙当前的开关状态
let 当前状态 = access.getState();
if (当前状态 == access.BluetoothState.STATE_ON) {
// 若蓝牙是开启的,则主动关闭蓝牙
access.disableBluetooth();
}
} catch (err) {
console.error('关闭蓝牙失败: ' + (err as BusinessError).code + ', ' + (err as BusinessError).message);
}
同样地,调用 disableBluetooth() 时,系统也会弹出对话框让用户确认:

四、把蓝牙操作封装成"工具箱"
为了方便使用,咱们可以把刚才的所有功能封装成一个 蓝牙管理器 类,就像把常用工具都放进一个工具箱里一样,想用的时候直接拿出来就行:
ts
import { access } from '@kit.ConnectivityKit';
import { BusinessError } from '@kit.BasicServicesKit';
export class 蓝牙管理器 {
// 蓝牙状态变化回调函数
状态变化回调 = (状态: access.BluetoothState) => {
let 状态描述 = '';
switch (状态) {
case access.BluetoothState.STATE_OFF:
状态描述 = '蓝牙已关闭';
break;
case access.BluetoothState.STATE_TURNING_ON:
状态描述 = '蓝牙正在开启...';
break;
case access.BluetoothState.STATE_ON:
状态描述 = '蓝牙已开启,可以使用了!';
break;
case access.BluetoothState.STATE_TURNING_OFF:
状态描述 = '蓝牙正在关闭...';
break;
case access.BluetoothState.STATE_BLE_TURNING_ON:
状态描述 = 'BLE正在开启...';
break;
case access.BluetoothState.STATE_BLE_ON:
状态描述 = 'BLE已开启';
break;
case access.BluetoothState.STATE_BLE_TURNING_OFF:
状态描述 = 'BLE正在关闭...';
break;
default:
状态描述 = '未知状态';
break;
}
console.info('当前蓝牙状态: ' + 状态描述);
};
// 初始化蓝牙管理器
public 初始化() {
try {
// 订阅蓝牙状态变化
access.on('stateChange', this.状态变化回调);
} catch (err) {
console.error('订阅蓝牙状态失败: ' + (err as BusinessError).code + ', ' + (err as BusinessError).message);
}
}
// 开启蓝牙
public 开启蓝牙() {
try {
// 主动获取蓝牙当前的开关状态
let 当前状态 = access.getState();
if (当前状态 == access.BluetoothState.STATE_OFF) {
// 若蓝牙是关闭的,则主动开启蓝牙
access.enableBluetooth();
}
} catch (err) {
console.error('开启蓝牙失败: ' + (err as BusinessError).code + ', ' + (err as BusinessError).message);
}
}
// 关闭蓝牙
public 关闭蓝牙() {
try {
// 主动获取蓝牙当前的开关状态
let 当前状态 = access.getState();
if (当前状态 == access.BluetoothState.STATE_ON) {
// 若蓝牙是开启的,则主动关闭蓝牙
access.disableBluetooth();
}
} catch (err) {
console.error('关闭蓝牙失败: ' + (err as BusinessError).code + ', ' + (err as BusinessError).message);
}
}
// 销毁蓝牙管理器
public 销毁() {
try {
// 取消订阅蓝牙状态变化
access.off('stateChange', this.状态变化回调);
} catch (err) {
console.error('取消订阅蓝牙状态失败: ' + (err as BusinessError).code + ', ' + (err as BusinessError).message);
}
}
}
// 创建一个蓝牙管理器实例
const 蓝牙工具 = new 蓝牙管理器();
export default 蓝牙工具;
现在咱们就可以方便地使用这个蓝牙管理器了:
ts
import 蓝牙工具 from './BluetoothManager';
// 初始化蓝牙
蓝牙工具.初始化();
// 需要使用蓝牙时开启
蓝牙工具.开启蓝牙();
// 用完蓝牙后关闭
蓝牙工具.关闭蓝牙();
// 页面销毁时记得销毁管理器
蓝牙工具.销毁();
🥦 西兰花小贴士 :
封装成工具类的好处是可以重复使用,而且代码结构更清晰。就像家里的工具箱一样,下次要用的时候直接拿出来就行,不用再重新找工具~
五、总结一下
今天咱们把鸿蒙应用的蓝牙设置功能彻底搞明白了:
- 权限申请 :在
module.json5里加ohos.permission.ACCESS_BLUETOOTH权限 - API导入 :导入
access和BusinessError模块 - 状态监听 :订阅
stateChange事件,实时获取蓝牙状态 - 开关控制 :用
enableBluetooth()和disableBluetooth()控制蓝牙开关 - 封装工具类 :把所有功能封装成
蓝牙管理器,方便使用和维护
📚 推荐资料:
我是盐焗西兰花,
不教理论,只给你能跑的代码和避坑指南。
下期见!🥦