系列文章《鸿蒙开发从入门到专家》第 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 控制应用:
手机端发现同一账号下的台灯设备。
用户点击设备卡片,建立分布式数据对象会话。
手机端修改
power、brightness、color字段。台灯端(通常是搭载 OpenHarmony 的轻量设备)订阅数据变化,驱动硬件执行。
状态回显到手机 UI,用户看到实时反馈。
如果台灯端是轻量设备,可能没有屏幕和复杂 UI,只需要一个后台服务订阅分布式数据即可。
小结
鸿蒙的分布式能力降低了多设备协同的开发门槛,但也不是万能药:
设备发现依赖账号或局域网环境。
分布式数据适合状态同步,不适合高频率实时流。
跨设备调用需要用户授权,不能静默执行。
下一篇我们回到应用基础能力,聊聊国际化与多语言适配。