HarmonyOS 鸿蒙Next的“实况窗”怎么开发?能用在外卖订单追踪上吗?
HarmonyOS 鸿蒙Next的“实况窗”怎么开发?能用在外卖订单追踪上吗? 想搞一个让用户在桌面实时看到骑手位置和预计送达时间,不用点开 App。鸿蒙的“实况窗”支持这个?
是的!HarmonyOS 5 的 Live Window(实况窗) 是原子化服务的核心能力之一。您只需在元服务中定义动态卡片模板,并通过 Push Kit + 分布式数据管理 实时更新状态(如骑手坐标、倒计时)。用户将卡片添加到桌面后,系统会自动轮询最新数据,功耗极低。华为已为美团、饿了么等提供标准接入方案,文档可以查下 官网。
更多关于HarmonyOS 鸿蒙Next的“实况窗”怎么开发?能用在外卖订单追踪上吗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
HarmonyOS 5及以上版本 的 Live Window(实况窗) 是原子化服务的核心能力之一。您只需在元服务中定义动态卡片模板,并通过 Push Kit 和 分布式数据管理 实时更新状态(如骑手坐标、倒计时)。用户将卡片添加到桌面后,系统会自动轮询最新数据,功耗极低。华为已为美团、饿了么等提供标准接入方案,文档可以查下开发文档指导
期待HarmonyOS能在未来带来更多创新的技术和理念。
针对 ** 鸿蒙 6(API Level 10)** 的外卖订单实况窗(实时卡片)开发,需结合鸿蒙 6 对原子化服务 & 实时卡片的优化特性(更灵活的更新策略、更稳定的后台能力、更好的多设备适配),以下是适配鸿蒙 6 的专属开发指南:
一、鸿蒙 6 下 “实况窗” 的核心变化
鸿蒙 6 中 “实况窗” 统一称为 「实时动态卡片」,相比旧版本有 2 个关键优化:
- 支持更短的更新间隔(最小 30 秒 / 次,适配外卖骑手位置的高频变化);
- 支持后台保活更新(原子化服务后台权限在鸿蒙 6 中更易申请,避免更新中断);
- 支持折叠屏 / 平板的自适应尺寸(卡片可自动适配不同设备的桌面布局)。
二、鸿蒙 6 专属开发步骤(外卖订单场景)
步骤 1:创建鸿蒙 6 原子化服务项目
- 确保 DevEco Studio 版本≥4.1(支持鸿蒙 6 API 10);
- 新建项目→选择「原子化服务」→「Stage 模型 + ArkTS」→最小 SDK 版本选择 “6.0.0(API 10)”。
步骤 2:鸿蒙 6 下的卡片配置(module.json5)
鸿蒙 6 对formConfig新增了动态尺寸、后台更新策略等配置,需按以下配置:
{
"module": {
"abilities": [
{
"name": ".TakeawayLiveCardAbility",
"type": "form",
"visible": true,
"extensionAbilityType": "form",
"formConfig": {
"isDefault": true,
"formType": "Realtime", // 鸿蒙6明确“实时卡片”类型
"scheduledUpdateTime": "00:00",
"updateDuration": 30, // 鸿蒙6支持最小30秒/次更新(适配骑手位置频率)
"defaultDimension": "2*2", // 默认尺寸
"supportDimensions": ["2*2", "4*2", "2*4"], // 鸿蒙6支持多尺寸自适应
"backgroundUpdateEnable": true, // 鸿蒙6新增:允许后台更新(关键)
"formLink": "/pages/OrderDetail" // 鸿蒙6新增:卡片点击跳转的App页面
}
}
],
"requestPermissions": [
{
"name": "ohos.permission.LOCATION",
"reason": "获取骑手位置",
"usedScene": { "abilities": [".TakeawayLiveCardAbility"], "when": "always" }
},
{
"name": "ohos.permission.KEEP_BACKGROUND_RUNNING",
"reason": "后台更新订单数据",
"usedScene": { "abilities": [".TakeawayLiveCardAbility"], "when": "always" }
}
]
}
}
步骤 3:鸿蒙 6 适配的实况窗 UI(支持动态尺寸)
鸿蒙 6 的 ArkTS 支持@FormDimension装饰器,可根据卡片尺寸动态调整 UI(比如大尺寸显示地图缩略图,小尺寸显示文字):
// TakeawayLiveCard.ets(实时卡片UI)
@Entry
@Component
struct TakeawayLiveCard {
@State riderLocation: string = "骑手已到XX路";
@State deliveryTime: string = "预计5分钟送达";
@FormDimension currentDimension: string = "2*2"; // 鸿蒙6获取当前卡片尺寸
build() {
Column() {
// 大尺寸卡片(4*2)显示地图缩略图
if (this.currentDimension === "4*2") {
Image('https://your-map-api.com/rider?lat=xxx&lng=xxx') // 实时地图缩略图
.width('100%')
.height(80);
}
// 通用信息(骑手位置+预计时间)
Row({ space: 8 }) {
Image($r('app.media.rider_icon'))
.width(24)
.height(24);
Text(this.riderLocation)
.fontSize(this.currentDimension === "2*2" ? 14 : 16);
}
Row({ space: 8 }) {
Image($r('app.media.clock_icon'))
.width(24)
.height(24);
Text(this.deliveryTime)
.fontSize(14)
.fontColor('#FF6B00');
}
}
.width('100%')
.height('100%')
.padding(12)
.justifyContent(FlexAlign.Center);
}
}
步骤 4:鸿蒙 6 的实时数据更新(更高效)
鸿蒙 6 优化了formProvider的更新接口,支持批量更新 + 低延迟推送,结合外卖场景的实现:
- App 侧推送骑手数据:
// 订单页面(App侧)
import formProvider from '@ohos.app.form.formProvider';
// 骑手位置更新时,推送数据到实况窗
async function pushRiderData(formId: string, location: string, time: string) {
const formData = { riderLocation: location, deliveryTime: time };
// 鸿蒙6新增:支持“高优先级更新”
await formProvider.updateForm(formId, formData, { priority: 1 });
}
- 实况窗接收并刷新:
// TakeawayLiveCardAbility.ets(FormExtensionAbility)
export default class TakeawayLiveCardAbility extends FormExtensionAbility {
// 鸿蒙6的onFormUpdate支持更详细的更新信息
onFormUpdate(formId: string, message: formProvider.FormUpdateMessage): void {
const newData = message.param;
// 鸿蒙6优化:更新UI时自动触发轻量渲染(不重绘整个卡片)
this.updateFormData(formId, newData);
}
}
步骤 5:鸿蒙 6 的权限动态申请(必须)
鸿蒙 6 对权限管控更严格,需在原子化服务启动时动态申请权限:
// FormExtensionAbility中申请权限
onCreate(want: Want): void {
// 动态申请位置+后台保活权限
abilityAccessCtrl.createAtManager().requestPermissionsFromUser(
this.context,
["ohos.permission.LOCATION", "ohos.permission.KEEP_BACKGROUND_RUNNING"]
);
}
三、鸿蒙 6 下的核心优势(外卖场景)
- 更新更及时:30 秒 / 次的更新间隔,比旧版本(1 分钟)更适配骑手位置的实时变化;
- 后台更稳定:
KEEP_BACKGROUND_RUNNING权限在鸿蒙 6 中对原子化服务更宽松,避免订单更新中断; - 多设备适配:折叠屏 / 平板上卡片自动切换尺寸(小尺寸显文字、大尺寸显地图),用户体验更好。
四、用户添加实况窗到桌面(鸿蒙 6 操作)
鸿蒙 6 简化了卡片添加流程:
- 安装原子化服务后,长按 App 图标→选择「添加实时卡片」;
- 选择尺寸(22/42),直接固定到桌面,实时显示骑手位置 & 送达时间。
总结:鸿蒙 6 的实况窗(实时卡片)完全适配外卖订单追踪场景,核心是利用其 “更短更新间隔 + 稳定后台” 的特性,结合动态权限 + 多尺寸 UI,实现桌面实时展示的需求。
在应用主页面中有多个场景的卡片,点击对应卡片,即可跳转到该场景的页面。 通过场景页面中的各个按钮,可以进行实况窗的创建、更新与结束,查看该场景中实况窗更新的流程(流程仅供参考,用户可自行定义)。



demo 参考地址
https://gitee.com/harmonyos_samples/live-view-kit_-sample-code_-clientdemo_-arkts
伙伴您好,实况窗支持即时配送场景。
【解决方案】
- 实况窗支持对接的场景,具体见场景描述。
- 出行打车TAXI;
- 即时配送DELIVERY;
- 航班FLIGHT;
- 高铁/火车TRAIN;
- 排队QUEUE;
- 取餐PICK_UP;
- 赛事比分SCORE;
- 共享租赁RENT;
- 计时TIMER;
- 运动锻炼WORKOUT;
- 导航NAVIGATION。
【背景知识】 Live View Kit(实况窗服务)支持应用将订单或者服务的实时状态信息变化在设备的关键界面展示,并对展示信息的生命周期、用户界面UI效果等进行管理。
是的,HarmonyOS Next的“实况窗”非常适合用于外卖订单追踪这类实时状态展示的场景。它允许应用将关键信息(如骑手位置、送达进度、预计时间)以胶囊、卡片等形态显示在设备屏幕的左上角或顶部,用户无需进入App即可一目了然。
核心开发流程与要点如下:
-
场景抽象与配置:
- 首先,你需要将“外卖订单追踪”抽象为一个持续性任务。这需要在项目的
module.json5配置文件中,为相应的Ability(通常是UIAbility)声明mission和continuousTask相关权限与配置,确保应用在后台运行时仍能更新实况窗。
- 首先,你需要将“外卖订单追踪”抽象为一个持续性任务。这需要在项目的
-
使用“实况窗”Kit开发:
- HarmonyOS Next提供了专门的
@ohos.liveWindow开发套件来创建和管理实况窗。 - 关键步骤:
- 创建与更新:通过
liveWindow.create()和liveWindow.update()方法,将订单状态(如“骑手已取货”、“正在配送中”)、进度(如一个0-100%的进度条)、关键信息(如预计送达时间)以及可操作的按钮(如“联系骑手”、“确认收货”)更新到实况窗。 - 形态管理:实况窗支持胶囊态(紧凑形态,常驻状态栏区域)和卡片态(展开形态,显示更多信息)。你可以根据信息量在两者间平滑切换。例如,平时显示胶囊(显示一个外卖图标和剩余时间),用户点击或特定触发时展开为卡片(显示地图轨迹、骑手电话等)。
- 创建与更新:通过
- 数据驱动:实况窗的内容更新应由订单状态和位置数据驱动。你需要建立应用后台服务或与推送服务结合,当订单状态或骑手GPS位置发生变化时,立即调用API更新实况窗界面。
- HarmonyOS Next提供了专门的
-
与外卖场景结合:
- 地图集成:在展开的卡片态中,可以集成地图组件(如
<Map>)来动态显示骑手移动轨迹,这需要申请地图服务权限并调用相应能力。 - 实时位置:骑手位置的获取通常依赖于服务端推送或应用后台定时拉取。收到新位置后,除了更新实况窗的文本信息(如“距您500米”),还可以刷新地图视图。
- 交互性:实况窗上的按钮可以绑定事件,例如点击“联系骑手”直接调用电话或IM能力,提供无缝体验。
- 地图集成:在展开的卡片态中,可以集成地图组件(如
总结:
利用HarmonyOS Next的实况窗开发外卖订单追踪功能在技术上是完全可行的,并且能极大提升用户体验。你需要重点关注后台持续任务管理、@ohos.liveWindow API的调用以及实时数据与UI的同步。按照官方文档的实况窗开发指南进行,即可实现桌面级的实时订单状态展示。


