HarmonyOS鸿蒙Next中文件管理器音频文件选择问题:设置type为audio为何pptx文件也能弹出应用?

HarmonyOS鸿蒙Next中文件管理器音频文件选择问题:设置type为audio为何pptx文件也能弹出应用? 我想文件管理器或者其它APP的音频文件选择在其它应用打开可以看到我们得应用,我设置了文件的type只有audio,为什么我长按pptx文件 在其它应用打开,也可以弹出来看到我们得应用呢?

分享功能是正常的,其他应用打开功能是不正常的。

下面这个是我的配置,我的需求是【分享】功能只有音频文件可以通过我们应用打开,【其他应用打开】功能也只有音频文件的打开方式才有我们的应用。

"skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home",
              "ohos.want.action.sendData",
              "ohos.want.action.viewData",
            ],
            "uris": [
              {
                "scheme": "file",
                "type": "general.audio",
                "linkFeature": "FileOpen"
              },
              {
                "scheme": "file",
                "utd": "general.audio",
                "maxFileSupported": 1
              },
            ]
          },
        ]

更多关于HarmonyOS鸿蒙Next中文件管理器音频文件选择问题:设置type为audio为何pptx文件也能弹出应用?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

开发者您好,根据您的配置信息,应该是多个actions放在一起导致的配置冲突。

可以将分享的actions"ohos.want.action.sendData"和拉起应用的actions"ohos.want.action.viewData"独立开来,避免互相干扰。

"skills": [
  {
    "entities": [
      "entity.system.home"
    ],
    "actions": [
      "action.system.home",
      "ohos.want.action.viewData",
    ],
    "uris": [
      {
        "scheme": "file",
        "type": "general.audio",
        "linkFeature": "FileOpen"
      }
    ]
  },
  {
    "actions": [
      "ohos.want.action.sendData",
    ],
    "uris": [
      {
        "scheme": "file",
        "utd": "general.audio",
        "maxFileSupported": 1
      },
    ]
  }
]

更多关于HarmonyOS鸿蒙Next中文件管理器音频文件选择问题:设置type为audio为何pptx文件也能弹出应用?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


学习了

在 HarmonyOS Next 中,文件选择器 type 设为 audio 时,系统主要依据文件扩展名或 MIME 类型进行过滤。pptx 文件弹出应用,可能是因为其 MIME 类型被错误关联(如部分系统将 .pptx 内部嵌的音频识别为容器),或文件选择器未严格校验实际内容,导致过滤逻辑失效。该行为属系统文件类型识别机制的兼容性问题。

其他应用打开长按菜单,是通过URIS数组里第二项匹配到的。

分享正常是因为只匹配严格type(第一项);而“其它”打开场景,系统会匹配utd(统一数据类型),你配置的第二项只写了utd: general.audio却没写type,这会让系统对所有文件后缀都尝试匹配一次你的应用。

utd值的匹配范围比MIME type更宽,是按UTD别名体系去比较的,general.audio这个别名很可能在你的环境中把pptx对应的UTD也涵盖了进去。

解决办法:把第二项也加上type字段约束,或者把第一项的linkFeature补到分享那项,去掉只含utd的第二项。

例如只保留:

{
  "scheme": "file",
  "type": "general.audio",
  "linkFeature": "FileOpen"
}

这样FileOpen覆盖“其他应用打开”,而“分享”的ohos.want.action.sendData本身就会走type过滤。

回到顶部