如何解决HarmonyOS鸿蒙Next中隐式want无法拉起目标应用问题

如何解决HarmonyOS鸿蒙Next中隐式want无法拉起目标应用问题

【问题现象】

在隐式匹配want时,需要使用pathRegex正则匹配文件类型,使用下面的配置后匹配失败,无法拉起应用。

"skills": [
  {
    "actions": [
      "ohos.want.action.viewData"
    ],
    "uris": [
      {
        "scheme": "file",
        "host": "file",
        "port": "21",
        "pathRegex": ".*txt",
        "linkFeature": "fileopen"
      }
    ]
  }
]

点击放大

【背景知识】

参考隐私want的匹配原理,规则比较详细,这里把基本匹配规则抽取如下:

  • 系统将调用方传入的want参数(包含action、entities、uri、type和parameters属性)与已安装待匹配应用组件的skills配置(包含actions、entities、uris和type属性)进行匹配。
  • 当want参数五个属性匹配均未配置,则隐式匹配失败。

**特殊情况:**当parameters中的linkFeature字段取值不为空时,系统将优先进行linkFeature匹配。

如果匹配成功,则会提示拉起应用。

【定位思路】

1. 检查skills配置项

根据匹配规则,如果匹配不上,就从五个字段中下手,从skills配置文件可以看出问题代码配置的主要参数情况如下:

  • actions:ohos.want.action.viewData
  • scheme:file
  • host:file
  • port:21
  • pathRegex:.*txt
  • linkFeature:fileopen

从代码中可以看出,期望匹配的url类型是:

"file://file:21/.*txt"

2. 复现问题,找配置项中的问题

根据匹配规则,可以发现问题代码虽然配置了pathRegex,但是用正则表达式进行匹配文件,没有匹配到应用。

【解决方案】

使用正确的want匹配上述skills,以txt格式为例:

uri: "file://file:21/student.txt"

代码示例如下:

@Entry
@Component
struct RichEditorExample {
  build() {
    Column() {
      Button('点击进行匹配').onClick(() => {
        let wantInfo: Want = {
          uri: "file://file:21/student.txt"
        };
        let context = getContext() as common.UIAbilityContext
        context.startAbility(wantInfo)
      })
        .margin({ top: 200 })
    }.height('100%').width('100%')
  }
}

可以成功拉起应用。

点击放大

【总结】

  • 隐式want匹配关注五个核心参数,如果匹配不上,大概率是某个参数配置不正确,逐个排查actionsschemehostportpathRegex或者pathStart
  • 还有一种方式是显式want匹配,但是从API 12开始,这种方式仅限制在应用内跳转,不适应应用拉起。

点击放大


更多关于如何解决HarmonyOS鸿蒙Next中隐式want无法拉起目标应用问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于如何解决HarmonyOS鸿蒙Next中隐式want无法拉起目标应用问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,隐式Want无法拉起目标应用的问题通常与Want的配置或目标应用的Ability声明有关。

首先,确保隐式Want的actionentitiesuri等参数正确配置,且与目标应用的config.json中的skills部分匹配。目标应用的skills中需声明相应的actionsentities,以响应隐式Want。

其次,检查目标应用的Ability是否已正确实现onStart方法,确保其能够处理隐式Want的启动请求。如果目标应用未安装或未启动,系统可能无法找到并拉起该应用。

最后,确保设备上的HarmonyOS版本支持隐式Want的相关功能,避免因系统版本不兼容导致的问题。

回到顶部