HarmonyOS鸿蒙Next中“实况窗”卡片能否响应用户点击跳转到特定页面?

HarmonyOS鸿蒙Next中“实况窗”卡片能否响应用户点击跳转到特定页面? 我们业务场景中希望用户点击服务卡片上的“查看详情”按钮后,直接打开 App 内的订单详情页,而非跳转首页,这种场景还挺重要的,应该如何做呢?

5 回复

1. 在 module.json5 中为 Ability 配置 URI 路由支持

在你的主 Ability(通常是 EntryAbility)中启用 URI 启动能力,并声明支持的 scheme 和 path:

{
  "module": {
    "abilities": [
      {
        "name": "EntryAbility",
        "srcEntry": "./ets/entryability/EntryAbility.ets",
        "launchType": "standard",
        "skills": [
          {
            "entities": ["entity.system.home"],
            "actions": ["action.system.home"]
          },
          // 新增:支持自定义 URI 启动
          {
            "uris": [
              {
                "scheme": "yourapp",
                "host": "order",
                "path": "/detail"
              }
            ]
          }
        ]
      }
    ]
  }
}

2. 在服务卡片中设置点击事件跳转到该 URI

在服务卡片的构建逻辑(如 FormProviderFormComponent)中,为“查看详情”按钮绑定一个 Intent,使用 want 对象指定 URI:

// 在卡片的 onClick 回调中(例如 FormUIAbility)
import { router } from '@kit.ArkTS';

// 假设 orderId = "12345"
const orderId = "12345";
const url = `yourapp://order/detail?id=${orderId}`;

// 使用 router.pushUrl 或直接启动 Ability
router.pushUrl({
  url: 'pages/OrderDetail', // 如果是内部页面路由(仅限同一 Ability 内)
  params: { orderId: orderId }
});

但注意:服务卡片运行在独立进程,不能直接调用 router.pushUrl(那是页面内的 API)。正确做法是使用 Want 启动 Ability

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

// 构造 Want
const want = {
  bundleName: 'com.yourcompany.yourapp',
  abilityName: 'EntryAbility',
  uri: `yourapp://order/detail?id=${orderId}`
};

// 创建 WantAgent
const wantAgentInfo = {
  wants: [want],
  operationType: wantAgent.OperationType.START_ABILITY
};

wantAgent.getWantAgent(wantAgentInfo).then((agent) => {
  // 绑定到卡片按钮的点击事件
  // 在 FormProvider 的 onUpdate 或 onAcquireForm 中设置
});

3. 在 EntryAbility 的 onCreate()onNewWant() 中解析 URI 参数

import UIAbility from '@kit.UIAbility';
import hilog from '@kit.LogKit';

export default class EntryAbility extends UIAbility {
  onCreate(want, launchParam) {
    hilog.info(0x0000, 'EntryAbility', 'onCreate, uri: %{public}s', want.uri || 'none');
    this.handleUri(want);
  }

  onNewWant(want, launchParam) {
    // 当应用已在运行时,通过 URI 重新唤起
    this.handleUri(want);
  }

  private handleUri(want) {
    if (want.uri) {
      const uri = new URL(want.uri);
      if (uri.host === 'order' && uri.pathname === '/detail') {
        const orderId = uri.searchParams.get('id');
        // 将 orderId 保存到全局状态(如 AppState)或通过 router 跳转
        // 然后导航到订单详情页
      }
    }
  }
}

然后在主页面(如 Index.ets)中读取全局状态,自动跳转:

// Index.ets
onAppear() {
  const orderId = getAppContext().getOrderId(); // 自定义全局状态管理
  if (orderId) {
    router.replaceUrl({ url: 'pages/OrderDetail', params: { id: orderId } });
  }
}

更多关于HarmonyOS鸿蒙Next中“实况窗”卡片能否响应用户点击跳转到特定页面?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


1、您可以通过点击辅助区的跳转动作:在liveViewManager.LiveView(结构体)中携带胶囊所需的参数liveViewData.primary.extensionData.clickAction字段,参考:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/liveview-create-locally#section25952751613

2、可以通过ExtensionData.clickAction,点击辅助区的跳转动作,请调用wantAgent.getWantAgent()来构造。文档参考:
https://developer.huawei.com/consumer/cn/doc/harmonyos-references/liveview-liveviewmanager#section14934174734616

3、通过wantAgent.getWantAgent跳转对应的UIAbility,WantAgentInfo中只能设置本应用的UIAbility。参考文档:
https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-app-ability-wantagent#wantagentgetwantagent-1

图片

图片

图片

可以

可以。鸿蒙Next的实况窗卡片支持通过点击事件跳转到指定页面。开发者需在卡片配置文件中定义clickEvent,并在formAbility中实现onEvent回调方法,通过want参数指定目标页面的abilityNameparameters

在HarmonyOS Next中,实况窗卡片完全支持通过响应用户点击事件,跳转到应用内的指定页面(如订单详情页),而不是应用首页。这主要通过卡片提供方(你的应用)在开发时配置正确的意图(Intent)来实现。

核心实现步骤如下:

  1. 在卡片的form_config.json配置文件中定义动作(Action): 你需要在卡片的配置文件中,为“查看详情”这类按钮的点击事件声明一个特定的Action。这个Action将作为触发跳转的标识。

  2. 在UI描述文件(.hmljs)中绑定事件: 在卡片的UI模板中,为“查看详情”按钮绑定上一步定义的Action事件。

  3. 在应用侧处理Action并导航: 当用户在实况窗卡片上点击按钮时,系统会将包含该Action的事件传递给你的应用。你需要在应用内相应的Ability(通常是FormAbility或主Ability)中监听并处理这个事件。

    • 解析事件中的Action标识。
    • 根据业务逻辑(例如,从事件携带的参数中获取订单ID)构造目标页面(如订单详情页)的路径。
    • 使用页面路由能力(router API)直接跳转到目标页面。

关键点

  • 精准跳转:通过上述流程,你可以完全控制点击卡片按钮后的目的地,实现从卡片到应用内任意深级页面的直达导航。
  • 参数传递:你可以在触发事件时,将必要的业务参数(如订单ID)通过formBindingData等方式传递给应用,确保能打开正确的详情页。
  • 与“点击卡片主体”区分:通常,点击卡片空白区域(主体)的默认行为是打开应用首页。你需要将“查看详情”按钮的点击事件与卡片主体的点击事件分开处理,为按钮绑定独立的Action。

因此,你的业务场景是标准且可实现的。你需要在开发卡片时,为这个按钮配置独立的交互逻辑,并在应用内做好对应的路由处理。

回到顶部