HarmonyOS鸿蒙Next中display.on('foldStatusChange')在云调试时未进入折叠事件回调函数

HarmonyOS鸿蒙Next中display.on(‘foldStatusChange’)在云调试时未进入折叠事件回调函数 【问题描述】:折叠屏适配不到位,按照文档监听折叠事件【 display.on(‘foldStatusChange’,】,但在云调试的时候,进行折叠,好像没有进入折叠事件的回调函数。

【问题现象】:云调试进行折叠,回调函数不调用,日志信息 [nodict][nweb_display_listener.cc:68] notify OnFoldStatusChanged info change failed

测试步骤:折叠屏状态切换时,用户中心,投诉反馈,退出,隐私协议,客服等功能按钮消失

测试环境:WIFI、Pura 80 Ultra、中文,WIFI、Mate X5、中文

【版本信息】:不适用

【复现代码】:

// 注册折叠监听 Logger.error(‘Listening enabled. display.FoldStatus------------------21’); display.on(‘foldStatusChange’, (foldStatus: display.FoldStatus) => { Logger.error(‘Listening display.FoldStatus------------------>>>>>>>>>change’); Logger.error(Fold status changed: ${foldStatus}); this.workPort.postMessage(“tococos”, “isReload”); }); Logger.error(‘Listening enabled. display.FoldStatus------------------31’);

【尝试解决方案】:不适用


更多关于HarmonyOS鸿蒙Next中display.on('foldStatusChange')在云调试时未进入折叠事件回调函数的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

开发者您好,当前本地使用云调试测试您所提到的display.on(‘foldStatusChange’, callback);可以收到折叠屏变化的回调:

Listening enabled. Data: 1

Listening enabled. Data: 2

测试环境:Mate X5/6.0.0.130

复现代码:

// EntryAbility.ets
onWindowStageCreate(windowStage: window.WindowStage): void {
  let callback: Callback<display.FoldStatus> = (data: display.FoldStatus) => {
    hilog.info(DOMAIN, 'DisplayTest', 'Listening enabled. Data: ' + JSON.stringify(data));
  };
  try {
    display.on('foldStatusChange', callback);
    hilog.info(DOMAIN, 'DisplayTest', `register foldStatusChange success`);
  } catch (exception) {
    hilog.error(DOMAIN, 'DisplayTest',
      `Failed to register/unregister callback. Code: ${exception.code}, message: ${exception.message}`);
  }
}

麻烦提供下可复现的最小的demo和更完整的日志。

更多关于HarmonyOS鸿蒙Next中display.on('foldStatusChange')在云调试时未进入折叠事件回调函数的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


cke_472.png

代码里注册这个监听 成功,没报错。折叠发生后,系统日志报错:[nodict][nweb_display_listener.cc:68] notify OnFoldStatusChanged info change failed

display.on('foldStatusChange', callback); 在云真机上测试了下,在Pura X 上回调有响应,meta X上 无回调响应。

在HarmonyOS Next中,云调试时display.on('foldStatusChange')未触发回调,通常因云调试环境不支持真实折叠屏硬件或模拟器未开启折叠状态模拟功能。需在云调试配置中启用折叠屏模拟选项,并确保应用已正确申请ohos.permission.GET_WINDOW_INFO权限。检查事件监听代码是否在页面生命周期内注册,避免因页面未激活导致监听失效。

根据您提供的日志信息 [nodict][nweb_display_listener.cc:68] notify OnFoldStatusChanged info change failed,问题核心在于云调试环境与物理折叠屏设备在折叠状态模拟/传递机制上的差异。

主要原因分析:

  1. 云调试环境限制:云调试平台可能无法完全模拟或可靠地传递物理设备的硬件折叠状态变化。nweb_display_listener.cc 文件提示的错误表明,底层通知折叠状态变化的机制在云调试环境中可能未正常工作或不被支持。
  2. 监听注册时机:您的代码片段显示监听注册在某个方法内,需确保这段代码在应用启动早期(例如 onCreateonWindowStageCreate 生命周期)执行,且仅注册一次,避免重复注册导致回调失效。

排查与解决步骤:

  • 真机验证:这是最关键的步骤。请直接在支持的折叠屏真机(如您提到的 Mate X5)上运行和测试您的应用。真机环境能触发最真实的硬件事件,可以立即验证 foldStatusChange 回调是否按预期工作。
  • 检查生命周期:确保 display.on 监听注册在UIAbility的 onWindowStageCreate 生命周期中尽早完成,并考虑在 onWindowStageDestroy 中调用 display.off 进行注销,以管理好事件监听的生命周期。
  • 简化测试代码:在真机测试时,可以先在回调函数中执行最简单的日志打印或UI状态更新,排除因 postMessage 等复杂操作导致的问题。
  • 关注API兼容性:确认您使用的 @ohos.display API 版本与 HarmonyOS Next 的SDK版本完全匹配。查阅当前版本的开发生态文档,确保 foldStatusChange 事件在目标API版本中功能稳定。

由于云调试对硬件深度交互功能的模拟支持可能不完善,折叠状态变化这类依赖硬件传感器的事件,优先在真机环境下进行开发和调试是标准做法。

回到顶部