HarmonyOS 5.0.0 或以上:设备发现与连接(分布式协同基础)
·
HarmonyOS 5.0.0 或以上:设备发现与连接(分布式协同基础能力)
📌 场景介绍
在分布式系统中,第一步是发现并连接附近设备,这是实现:
-
跨设备文件发送
-
多屏协同、远程操控
-
任务迁移、音视频串流
的基础。本篇实现:
-
启动本地设备监听与广播
-
发现局域网内可协同设备
-
展示设备 ID、名称等基础信息
-
支持发起连接(为后续协同打基础)
🧱 项目结构
/entry/src/main/ets
└── pages/
└── DeviceDiscoveryDemo.ets // 分布式设备发现与连接页面
🧩 DeviceDiscoveryDemo.ets 示例页面
import distributedHardware from '@ohos.distributedHardware.deviceManager'
@Entry
@Component
struct DeviceDiscoveryDemo {
@State deviceList: Array<{ name: string; id: string }> = []
@State status: string = '未开始发现'
private dm?: distributedHardware.DeviceManager
private subscriptionId: string = 'demoSubscribe'
aboutToAppear() {
this.initDeviceManager()
}
private async initDeviceManager() {
distributedHardware.createDeviceManager('com.example.harmony', async (err, manager) => {
if (err) {
this.status = '❌ 初始化失败'
console.error('DeviceManager error:', err)
return
}
this.dm = manager
this.status = '✅ DeviceManager 初始化成功'
manager.on('deviceStateChange', (data) => {
console.info('Device state changed:', data)
})
manager.on('deviceFound', (device) => {
const id = device.deviceId
const name = device.deviceName
if (!this.deviceList.some(d => d.id === id)) {
this.deviceList.push({ id, name })
}
})
manager.on('discoverFail', (error) => {
this.status = '❌ 发现失败:' + error.reason
})
this.startDiscovery()
})
}
private async startDiscovery() {
if (!this.dm) return
this.status = '📡 正在搜索附近设备...'
const info = {
subscribeId: this.subscriptionId,
mode: 0, // 发现模式,可设为 0=默认
medium: 1, // Medium = 1: AUTO
freq: 1, // Discover频率 0=low,1=mid,2=high
isSameAccount: false,
isWakeRemote: true,
capability: 'dvkit' // 默认能力标识
}
this.dm.startDeviceDiscovery(info)
}
private async stopDiscovery() {
if (this.dm) {
this.dm.stopDeviceDiscovery(this.subscriptionId)
this.status = '⏹️ 已停止搜索'
}
}
build() {
Column() {
Text("🌐 分布式设备发现").fontSize(22).margin(20)
Button("开始发现设备").onClick(() => this.startDiscovery()).margin(6)
Button("停止发现设备").onClick(() => this.stopDiscovery()).margin(6)
Text(`状态:${this.status}`).fontSize(14).fontColor('#666').margin(10)
ForEach(this.deviceList, (d, index) => {
Column()
.backgroundColor('#f6f6f6')
.padding(10)
.borderRadius(8)
.margin({ top: 8 }) {
Text(`📱 设备名:${d.name}`).fontSize(16)
Text(`🆔 ID:${d.id}`).fontSize(12).fontColor('#999')
}
})
}
.padding(20)
.height('100%')
.scrollable(true)
}
}
✅ 效果说明
-
启动分布式设备发现服务,展示局域网中发现的设备
-
获取设备名、设备 ID,可用于后续连接与协同
-
支持开始/停止搜索,避免后台资源占用
🔧 拓展建议
-
支持点击某设备发起连接并跳转任务迁移页面
-
标记“当前设备”与“远程设备”身份
-
后续实现远程文件发送、远程 UI 显示、协同播放等高级协同能力
-
使用
startDeviceManagerFa快速唤起设备配对界面
更多推荐


所有评论(0)