HarmonyOS 鸿蒙Next中点击播控中心如何跳转到对应页面

HarmonyOS 鸿蒙Next中点击播控中心如何跳转到对应页面

现状:当前点击播控中心只是拉起对应应用

需求:点击播控中心如何跳转播放音频的页面

思路:将对应页面路由参数传递给播控中心,并在onNewWant生命周期函数内接受对应参数进行跳转

问题:怎么传统参数给播控中心,onNewWant中可以拿到吗

6 回复

可以参考以下链接:音频播放交互场景-音频和视频-媒体 - 华为HarmonyOS开发者

第一步,添加一个页面作为测试页面:

第二步,针对setLaunchAbility方法进行改造:如下

第三步,在 EntryAbility 文件中,添加生命周期函数:onNewWant

onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
  if (want) {
    const url = want.uri;
    if (url) {
      router.pushUrl({url:url});
    }
  }
}

以下是调试结果:

结果:跳转成功:

更多关于HarmonyOS 鸿蒙Next中点击播控中心如何跳转到对应页面的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


个人理解可以通过AVSession的setLaunchAbility方法关联跳转页的Want参数:

// 开始创建AVSession时就先设置启动Ability参数
import { avSession } from '@kit.MultimediaKit';

let session: avSession.AVSession = avSession.createAVSession(context, 'music', 'audio');
let want: Want = {
  bundleName: 'com.example.app',
  abilityName: 'EntryAbility',
  parameters: { 
    routePath: 'pages/PlayerPage', // 跳转页面路由
    mediaId: 'xxx' // 自定义参数
  }
};
session.setLaunchAbility(want);

然后需要onNewWant生命周期接收系统传递的Want对象再进行解析路由参数:

// EntryAbility.ets页操作
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';

export default class EntryAbility extends UIAbility {
  onNewWant(want: Want, launchParams: AbilityConstant.LaunchParam) {
    if (want.parameters?.routePath) {
      const targetPath = want.parameters.routePath as string;
      const mediaId = want.parameters.mediaId as string;
      // 执行页面跳转
      router.pushUrl({ url: targetPath, params: { id: mediaId } });
    }
  }
}

对了,好像还需要再module.json5中声明目标页面的路由:

{
  "module": {
    "abilities": [
      {
        "name": "EntryAbility",
        "srcEntry": "./ets/entryability/EntryAbility.ets",
        "launchType": "standard",
        "metadata": [
          {
            "name": "app.media_session",
            "value": "audio"
          }
        ]
      }
    ]
  }
}

仅作参考,不知是否可行

期待HarmonyOS能继续优化多屏协同功能,让跨设备体验更加完美。

参考这个方法:setLaunchAbility
文档链接:音频播放交互场景-音频和视频-媒体 - 华为HarmonyOS开发者
跳转操作处理:最后还是在Want里面去处理,这个方法可以设置一系列的拉起参数和行为

cke_507.png

在HarmonyOS Next中,播控中心页面跳转需使用router模块实现。首先在config.json中配置目标页面的路由信息。调用router.pushUrl()方法进行跳转,示例代码:

import router from '@ohos.router';

router.pushUrl({
  url: 'pages/MediaControlPage'
}).catch(err => {
  console.error(`跳转失败: ${err}`);
});

需确保目标页面已在manifest中声明。跳转参数可通过params传递。

在HarmonyOS Next中实现播控中心跳转到指定音频播放页面,可以通过Want参数传递实现。具体方案如下:

  1. 在拉起播控中心时,通过Want参数传递页面路由信息:
let want = {
  bundleName: 'com.example.audioapp',
  abilityName: 'AudioControlAbility',
  parameters: {
    routePath: 'audio/player',
    audioId: '12345'  // 需要传递的音频ID参数
  }
};
await context.startAbility(want);
  1. 在目标Ability的onNewWant回调中接收参数:
onNewWant(want: Want) {
  let routePath = want.parameters?.routePath;
  let audioId = want.parameters?.audioId;
  // 根据参数执行页面跳转逻辑
}
  1. 关键点说明:
  • 参数通过Want的parameters字段传递
  • 接收方Ability需要配置为单实例模式(launchType: ‘standard’)
  • 播控中心应用需要声明支持接收这些参数

注意确保传递的参数大小不超过限制(通常建议不超过128KB),且参数类型应为基本类型或可序列化对象。

回到顶部