HarmonyOS 5.0.0 或以上:构建分布式协同 UI(手机遥控大屏布局控制)


📌 场景介绍

在 HarmonyOS 超级终端中,常见分布式 UI 协同场景包括:

  • 手机控制电视播放 / 音量调节

  • 手机作为遥控器控制平板界面

  • 多端交互式协同,如 PPT 控制器、投屏控制面板

本篇实现:

  • 手机端作为遥控器发送指令

  • 大屏端实时响应并修改 UI 内容

  • 使用 @ohos.distributedData 实现跨设备同步指令


🧱 页面结构(需两个页面分别部署在两个设备上)

/entry/src/main/ets
  └── pages/
       ├── RemoteControlPage.ets       // 手机端遥控器页面
       └── RemoteDisplayPage.ets       // 大屏端展示响应页面

🧱 权限配置(config.json)

"reqPermissions": [
  { "name": "ohos.permission.DISTRIBUTED_DATASYNC" }
]

🧩 RemoteControlPage.ets(遥控器页面)

import distributedData from '@ohos.distributedData'

@Entry
@Component
struct RemoteControlPage {
  private kvStore: distributedData.SingleKVStore | undefined

  async aboutToAppear() {
    const kvManager = distributedData.createKVManager({
      context: getContext(this),
      bundleName: 'com.example.demo'
    })

    this.kvStore = await kvManager.getSingleKVStore({
      storeId: 'control_store',
      syncable: true
    })
  }

  private async sendCommand(cmd: string) {
    if (!this.kvStore) return
    await this.kvStore.put('remote_cmd', cmd)
    await this.kvStore.sync({ deviceIdList: [], mode: distributedData.SyncMode.PUSH_ONLY })
  }

  build() {
    Column() {
      Text("📱 手机端控制器").fontSize(22).margin(20)

      Button("显示 红色页面").onClick(() => this.sendCommand('RED')).margin(10)
      Button("显示 绿色页面").onClick(() => this.sendCommand('GREEN')).margin(10)
      Button("显示 蓝色页面").onClick(() => this.sendCommand('BLUE')).margin(10)
    }
    .padding(30)
    .height('100%')
  }
}

🧩 RemoteDisplayPage.ets(大屏端响应页面)

import distributedData from '@ohos.distributedData'

@Entry
@Component
struct RemoteDisplayPage {
  @State bgColor: string = '#ffffff'
  private kvStore: distributedData.SingleKVStore | undefined

  async aboutToAppear() {
    const kvManager = distributedData.createKVManager({
      context: getContext(this),
      bundleName: 'com.example.demo'
    })

    this.kvStore = await kvManager.getSingleKVStore({
      storeId: 'control_store',
      syncable: true
    })

    this.kvStore.on('dataChange', distributedData.SubscribeType.SUBSCRIBE_TYPE_REMOTE, (change) => {
      const cmd = change.insertEntries[0].value.value
      switch (cmd) {
        case 'RED':
          this.bgColor = '#ff4d4f'
          break
        case 'GREEN':
          this.bgColor = '#52c41a'
          break
        case 'BLUE':
          this.bgColor = '#1890ff'
          break
        default:
          this.bgColor = '#ffffff'
      }
    })
  }

  build() {
    Column() {
      Text("📺 大屏展示页面").fontSize(24).margin(30)
    }
    .backgroundColor(this.bgColor)
    .height('100%')
    .alignItems(HorizontalAlign.Center)
    .justifyContent(FlexAlign.Center)
  }
}

✅ 效果说明

  • 手机端点击“红 / 绿 / 蓝”按钮

  • 大屏设备页面实时变色响应

  • 通过分布式 KV 数据 + 跨设备同步完成遥控交互


🔧 拓展建议

  • 控制音量、视频播放、导航等模块

  • 传递 JSON 指令(如 {type: 'PAGE', value: 'Settings'}

  • 多端联动 + UI 回传支持(如确认已接收)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端付豪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值