HarmonyOS鸿蒙Next中拉起一个EmptyPageAbility,但无法显示页面内容,报错为401

HarmonyOS鸿蒙Next中拉起一个EmptyPageAbility,但无法显示页面内容,报错为401 通过联系人拉起一个EmptyPageAbility,显示一个空白界面,但无法显示页面内容,报错为401。配置已检查,求助是什么原因

报错信息:Failed to load EmptyPageAbility  EmptyPage pages/Index{“code”:401}

8 回复

这是由于当前的Ability的页面路径没有匹配到对应的页面配置路径导致的;

建议从以下方面进行排查:

  1. 确保main_pages下的路径与Ability中的windowStage.loadContent的路径一致:page前面没有/

    • //main_pages.json
      "src": [
         "pages/Index"
       ]
      
    • onWindowStageCreate(windowStage: window.WindowStage): void {
        //注意这里是 pages/Index; 不是 /pages/Index
          windowStage.loadContent('pages/Index', (err) => {
          });
        }
      
  2. 确保page必须在resources/profile目录下main_pages.json中配置;

  3. 确保main_pages与page的大小写一致

  4. 如果以上均正确,建议直接右键新建一个Page,再到Ability中的windowStage.loadContent配置对应Page看看是否还是空白

cke_37490.png

更多关于HarmonyOS鸿蒙Next中拉起一个EmptyPageAbility,但无法显示页面内容,报错为401的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


有没有在main_pages.json加上

main_pages.json
{
  "src": [
    "pages/Index"
  ]
}

module.json5
"abilities": [
  {
    "name": "EmptyPageAbility",
    "srcEntry": "./ets/entryability/EmptyPageAbility.ets",
    "description": "$string:EntryAbility_desc",
    "icon": "$media:layered_image",
    "label": "$string:EntryAbility_label",
    "startWindowIcon": "$media:startIcon",
    "startWindowBackground": "$color:start_window_background",
    "exported": true,
    "launchType": "singleton",
    "skills": [
      {
        "entities": [
          "entity.system.home"
        ],
        "actions": [
          "ohos.want.action.home"
        ]
      }
    ]
  }
]

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

你遇到的问题是:通过联系人拉起 EmptyPageAbility 时,页面无法显示,报错 {"code":401}。这是一个典型的 OpenHarmony/HarmonyOS 权限或 URI 权限校验失败 的错误。


🔍 错误分析:code: 401

在 OpenHarmony/HarmonyOS 系统中,HTTP 状态码风格的错误码常用于 Ability 调起、数据访问等场景:

  • 401 = Unauthorized(未授权)
  • 表示:当前调用方没有权限启动目标 Ability 或访问其 URI

这通常与以下配置有关:


✅ 常见原因及解决方案

1. 目标 Ability 未声明 visible 为 true

如果 EmptyPageAbility 所在的模块(如 entry)没有在 module.json5 中将该 Ability 设置为 对外可见,其他应用(如“联系人”)就无法拉起它。

检查 module.json5 配置

{
  "module": {
    "abilities": [
      {
        "name": "EmptyPageAbility",
        "srcEntry": "./ets/abilities/EmptyPageAbility.ts",
        "visible": true   // ← 必须设为 true!
      }
    ]
  }
}

⚠️ 默认 visiblefalse,仅同应用内可访问。跨应用(如系统联系人)调起必须显式设为 true


2. 未配置正确的 skills(意图匹配)

如果你是通过 URI 或隐式 Intent 被联系人拉起,EmptyPageAbility 必须声明能响应的 skills

✅ 示例(支持被 ohos.want.action.viewData 拉起):

"skills": [
  {
    "actions": ["ohos.want.action.viewData"],
    "entities": ["entity.system.browsable"],
    "uris": [
      {
        "scheme": "your-scheme",
        "host": "your-host"
      }
    ]
  }
]

如果联系人使用特定 URI(如 tel:contact:)拉起你,你的 uris 必须匹配该 scheme/host。


3. 调用方(联系人)未申请必要权限

某些敏感操作(如访问联系人后跳转第三方页面)可能需要调用方具备特定权限。但更常见的是 被调用方(你的 Ability)缺少权限声明

不过 401 更多指向 被调用方未开放访问权限,而非调用方缺权限。


4. 签名或沙箱隔离问题(较少见)

在高安全级别设备上,如果两个应用签名不同,且目标 Ability 未明确允许跨应用访问,也会拒绝启动。但通常仍归因于 visible: false


🛠️ 排查步骤总结

  1. 确认 EmptyPageAbilityvisible 字段为 true
    → 这是 90% 以上 401 错误的原因!

  2. 确认 skills 配置能匹配联系人发起的拉起意图
    → 查看联系人是如何调起你的(scheme?action?)

  3. 尝试用 DevEco Studio 直接运行该 Ability
    → 如果直接运行正常,但被联系人拉起失败,基本确定是 visibleskills 问题。

  4. 查看完整日志(hilog)

    hdc shell hilog | grep EmptyPageAbility
    

    可能会输出更详细的拒绝原因,如 "ability not visible"


💡 附加建议

如果你只是想提供一个“空白回调页面”供外部拉起(比如 OAuth 回调),确保:

  • 使用自定义 scheme(如 myapp://callback
  • module.json5 中正确注册该 scheme
  • 设置 visible: true
  • 页面逻辑简单,避免初始化崩溃(虽然 401 是权限问题,不是崩溃)

✅ 最终结论

报错 {"code":401} 的根本原因是:EmptyPageAbility 未对其他应用开放访问权限。请在 module.json5 中将该 Ability 的 visible 属性设置为 true,并确保 skills 配置匹配调用方的拉起方式。

完成配置后重新编译安装,问题应立即解决。

检查一下这些地方

路径配置错误

错误码 401通常表示参数验证失败,具体到该场景:

windowStage.loadContent()方法中指定的页面路径 pages/Index未在 main_pages.json中声明。

路径大小写不匹配(如 Index写成 index或反之)。

文件实际路径与配置路径不一致(如页面文件未放置在 pages/Index目录下)。

页面未在配置文件中注册

HarmonyOS 要求所有页面必须在 src/main/resources/base/profile/main_pages.json中静态注册后才能被加载。

在HarmonyOS Next中,EmptyPageAbility页面无法显示且报错401通常与权限配置相关。检查应用配置文件(app.json5或module.json5)中是否声明了ohos.permission.INTERNET或其他所需权限。401错误可能表示权限未正确授予或配置缺失,需确保权限在配置文件中正确定义并在安装时已授权。

根据报错信息,401错误通常表示权限问题。在HarmonyOS Next中,当通过联系人应用拉起EmptyPageAbility时,需要确保已正确配置相关权限。

请检查以下配置:

  1. 在config.json中确认已声明ohos.permission.START_ABILITIES_FROM_BACKGROUND权限
  2. 确保在abilities配置中正确设置了visible属性为true
  3. 验证PageAbility的启动模式配置是否正确
  4. 检查联系人应用是否具备拉起其他应用的能力权限

权限配置示例:

"reqPermissions": [
  {
    "name": "ohos.permission.START_ABILITIES_FROM_BACKGROUND"
  }
]

建议重新检查权限配置和ability的可见性设置,确保符合跨应用拉起的能力要求。

回到顶部