Administrator
发布于 2026-09-01 / 1,070 阅读
0
0

鸿蒙 IoT 互联开发:分布式软总线、设备发现与消息控制

系列文章《鸿蒙开发从入门到专家》第 29 篇 · 专家

鸿蒙的差异化能力里,分布式软总线(Distributed Soft Bus)是最常被提及的一个。它让手机、平板、车机、手表、IoT 设备能在同一个“超级终端”里互相发现、互相调用。作为开发者,我们不需要关心底层是 Wi-Fi、蓝牙还是 NFC,软总线会帮你选一条最合适的通道。

本文讲怎么用鸿蒙的分布式能力实现设备发现、消息发送和远程控制。

一、分布式软总线是什么

简单来说,软总线是一套设备间的虚拟通信总线。它屏蔽了不同物理链路的差异,给应用层提供统一的设备发现、连接、传输接口。

应用开发主要接触三层:

  • 设备管理:发现附近同账号或同局域网的鸿蒙设备。

  • 分布式数据/文件:跨设备共享数据和文件。

  • 分布式 Ability:在 A 设备上调用 B 设备的 Ability。

本文聚焦第一层和第三层,这是 IoT 控制类应用最常用的能力。

二、设备发现

设备发现的前提是设备登录了同一华为账号,或者处于同一局域网并开启了分布式能力。

import { deviceManager } from '@kit.DistributedServiceKit';

async function startDiscovery() {
  const dmInstance = deviceManager.createDeviceManager('bundleName');
  dmInstance.on('deviceStateChange', (data) => {
    for (const device of data.deviceList) {
      console.info(`设备状态变化:${device.deviceName}, ${device.deviceState}`);
    }
  });

  dmInstance.on('deviceFound', (data) => {
    console.info(`发现设备:${data.device.deviceName}`);
  });

  dmInstance.startDeviceDiscovery({
    subscribeId: 100,
    mode: deviceManager.DiscoverMode.DISCOVER_MODE_ACTIVE,
    medium: deviceManager.ExchangeMedium.AUTO,
    freq: deviceManager.ExchangeFreq.HIGH,
    isSameAccount: false,
    isWakeRemote: true,
    capability: 0,
  });
}

deviceFound 回调返回的设备信息包含 networkId,后续通信都要靠这个 ID 来定位设备。

三、分布式 Ability:跨设备调起

发现设备后,可以通过 startAbility 把 Ability 投到另一台设备上运行。

import { Want, wantAgent } from '@kit.AbilityKit';

const want: Want = {
  deviceId: remoteNetworkId,
  bundleName: 'com.example.myapp',
  abilityName: 'RemoteControlAbility',
  action: 'ohos.want.action.viewData',
};

getContext(this).startAbility(want);

被调起的设备需要声明 supportedModes 或分布式能力,否则系统会拒绝。实际开发中,建议先用本地模拟器或多设备调试环境验证跨设备链路。

四、消息控制:从手机下发指令

IoT 场景更常见的是“手机发指令,设备执行”。实现方式有两种:

  • 分布式数据对象:把控制状态写到分布式数据里,设备端订阅变化。

  • 自定义通信通道:通过软总线建立 P2P 通道,发送结构化消息。

以分布式数据为例:

import { distributedDataObject } from '@kit.DistributedDataObjectKit';

const lightStatus = distributedDataObject.create(getContext(this), {
  power: false,
  brightness: 80,
  color: '#FFFFFF',
});

lightStatus.on('change', (sessionId, fields) => {
  console.info(`状态变化:${JSON.stringify(fields)}`);
});

// 修改状态,其他设备会收到变更通知
lightStatus.power = true;

这种方式适合状态同步类控制,比如开关灯、调节亮度。它的好处是应用不用维持长连接,系统会自动处理多端同步。

五、安全与信任

分布式能力涉及多设备协同,安全门槛很高。关键原则:

  • 只有同账号或已配对的设备才能互相发现。

  • 跨设备调用 Ability 需要目标设备用户确认。

  • 敏感操作(如开锁、支付)必须配合生物识别或 PIN 码二次确认。

  • 传输数据建议加密,尤其是通过局域网 P2P 通道时。

六、实战:手机控制智能台灯

一个典型的鸿蒙 IoT 控制应用:

  1. 手机端发现同一账号下的台灯设备。

  2. 用户点击设备卡片,建立分布式数据对象会话。

  3. 手机端修改 power、brightness、color 字段。

  4. 台灯端(通常是搭载 OpenHarmony 的轻量设备)订阅数据变化,驱动硬件执行。

  5. 状态回显到手机 UI,用户看到实时反馈。

如果台灯端是轻量设备,可能没有屏幕和复杂 UI,只需要一个后台服务订阅分布式数据即可。

小结

鸿蒙的分布式能力降低了多设备协同的开发门槛,但也不是万能药:

  • 设备发现依赖账号或局域网环境。

  • 分布式数据适合状态同步,不适合高频率实时流。

  • 跨设备调用需要用户授权,不能静默执行。

下一篇我们回到应用基础能力,聊聊国际化与多语言适配。


评论