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

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

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

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


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

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

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';

// 初始化蓝牙
蓝牙工具.初始化();

// 需要使用蓝牙时开启
蓝牙工具.开启蓝牙();

// 用完蓝牙后关闭
蓝牙工具.关闭蓝牙();

// 页面销毁时记得销毁管理器
蓝牙工具.销毁();

🥦 西兰花小贴士

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


五、总结一下

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

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

📚 推荐资料:

我是盐焗西兰花,

不教理论,只给你能跑的代码和避坑指南。

下期见!🥦

相关推荐
hkNaruto13 小时前
【AI】AI学习笔记:MCP协议与gRPC、OpenAPI的差异
人工智能·笔记·学习
笨鸟笃行13 小时前
0基础小白使用ai能力将本地跑的小应用上云(作为个人记录)
人工智能·学习
Nan_Shu_61414 小时前
学习: Threejs (1)
javascript·学习
副露のmagic14 小时前
更弱智的算法学习 day24
python·学习·算法
Van_Moonlight14 小时前
RN for OpenHarmony 实战 TodoList 项目:加载状态 Loading
javascript·开源·harmonyos
程序猿零零漆15 小时前
Spring之旅 - 记录学习 Spring 框架的过程和经验(十一)基于XML方式、注解的声明式事务控制、Spring整合Web环境
xml·学习·spring
半夏知半秋15 小时前
rust学习-闭包
开发语言·笔记·后端·学习·rust
sheji341615 小时前
【开题答辩全过程】以 基于微信小程序的在线学习系统为例,包含答辩的问题和答案
学习·微信小程序·小程序
IT=>小脑虎15 小时前
Go语言零基础小白学习知识点【基础版详解】
开发语言·后端·学习·golang