鸿蒙Next蓝牙BLE开发教程

在鸿蒙Next上进行BLE开发时,如何实现设备扫描和连接?官方文档提到的BluetoothGattCallback具体该怎样使用?能否提供一个完整的示例代码,包括服务发现、数据读写等关键步骤?另外,鸿蒙Next的BLE API和Android的有哪些主要区别需要注意?

2 回复

鸿蒙Next搞BLE?简单!先装DevEco Studio,新建项目选蓝牙权限。然后开搞:扫描设备、连接GATT、读写特征值。记住,别把UUID写错,不然设备会“装死”。调试时多喝咖啡,毕竟蓝牙偶尔会抽风。搞定!

更多关于鸿蒙Next蓝牙BLE开发教程的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


以下是鸿蒙Next(HarmonyOS NEXT)蓝牙BLE开发的基础步骤和关键代码示例,帮助您快速实现设备扫描、连接和数据通信。


1. 环境配置

  • 开发工具:DevEco Studio(NEXT版本)。
  • SDK:确保项目build-profile.json5中已引入蓝牙权限和API依赖:
    "module": {
      "requestPermissions": [
        {
          "name": "ohos.permission.DISCOVER_BLUETOOTH",
          "reason": "扫描蓝牙设备"
        },
        {
          "name": "ohos.permission.MANAGE_BLUETOOTH",
          "reason": "管理蓝牙连接"
        },
        {
          "name": "ohos.permission.ACCESS_BLUETOOTH",
          "reason": "访问蓝牙服务"
        }
      ]
    }
    

2. 核心开发步骤

步骤1:初始化蓝牙适配器

import { bluetoothManager } from '@kit.ConnectivityKit';

// 获取蓝牙适配器
let adapter = bluetoothManager.getDefaultAdapter();
if (!adapter) {
  console.error("设备不支持蓝牙");
  return;
}

// 开启蓝牙(需用户授权)
await adapter.enableBluetooth();

步骤2:扫描BLE设备

import { BleScanFilter } from '@kit.ConnectivityKit';

// 定义扫描过滤器(可选)
let filter: BleScanFilter = {
  deviceId: "", // 指定设备ID,留空则扫描所有
  name: "MyDevice" // 按设备名过滤
};

// 开始扫描
adapter.startBLEScan([filter], {
  interval: 0, // 扫描间隔(毫秒)
  dutyMode: 0, // 扫描模式
});

// 监听扫描结果
adapter.on('BLEDeviceFind', (device) => {
  console.log("发现设备: " + device.deviceId);
  // 可保存deviceId用于后续连接
});

步骤3:连接BLE设备

import { ble } from '@kit.ConnectivityKit';

// 通过deviceId连接设备
let connection = ble.createGattConnection(deviceId);
await connection.connect();

// 监听连接状态
connection.on('connectionStateChange', (state) => {
  if (state === 2) { // 2表示已连接
    console.log("设备连接成功");
    connection.discoverServices(); // 发现服务
  }
});

步骤4:发现服务与特征值

// 服务发现回调
connection.on('servicesDiscovered', (services) => {
  for (let service of services) {
    console.log("服务UUID: " + service.serviceUuid);
    
    // 获取特征值
    let characteristics = service.characteristics;
    for (let char of characteristics) {
      console.log("特征值UUID: " + char.characteristicUuid);
      
      // 示例:订阅通知(如需接收数据)
      if (char.properties.notify) {
        connection.setNotifyCharacteristicChanged(char, true);
      }
    }
  }
});

// 监听特征值变化
connection.on('characteristicChange', (characteristic) => {
  let value = characteristic.value; // 接收到的数据
  console.log("收到数据: " + value);
});

步骤5:写入数据

// 向特征值写入数据(需找到对应UUID)
let char = ...; // 从服务中获取特征值对象
let data = new Uint8Array([0x01, 0x02]); // 示例数据
await connection.writeCharacteristicValue(char, data);

步骤6:断开连接

await connection.disconnect();
adapter.stopBLEScan(); // 停止扫描

3. 注意事项

  • 权限申请:需在module.json5中声明蓝牙权限,并在运行时动态申请。
  • 设备兼容性:测试时确认目标设备支持BLE(蓝牙4.0及以上)。
  • 资源释放:退出页面时务必断开连接并停止扫描。

通过以上步骤,您可完成鸿蒙Next的BLE设备通信。建议参考官方文档获取更详细参数说明。

回到顶部