HarmonyOS 鸿蒙Next 如何解决Web组件中的视频无法横屏全屏播放的问题

发布于 1周前 作者 ionicwang 最后一次编辑是 5天前 来自 鸿蒙OS

【问题现象】

HarmonyOS中Web组件加载视频播放的网页,点击全屏播放图标,无法横屏全屏播放。问题现象如下:

点击放大

【背景知识】

【解决方案】

点击全屏按钮Web组件进入全屏模式时,窗口的横竖屏状态不会主动发生变化,因此需要主动设置窗口方向为横屏。需要监听Web组件进入和退出全屏模式事件,在进入全屏模式时,设置窗口方向为横屏;在退出全屏模式时,设置窗口方向为竖屏。

(1)通过Web组件的onFullScreenEnter() 和 onFullScreenExit()方法,监听Web组件进入和退出全屏模式事件。

代码示例如下:

Web({ src: 'xxx', controller: this.controller })
        .onFullScreenEnter((event) => {
          console.log("onFullScreenEnter...")
        })
        .onFullScreenExit(() => {
          console.log("onFullScreenExit...")
        })

(2)通过Window提供的setPreferredOrientation()方法设置横竖屏。在进入全屏事件监听中,设置窗口方向为横屏,退出全面事件监听中,这种窗口方向为竖屏。

代码示例如下:

// 改变设备横竖屏状态函数
  private changeOrientation(isLandscape: boolean) {
    // 获取UIAbility实例的上下文信息
    let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
    // 调用该接口手动改变设备横竖屏状态
    window.getLastWindow(context).then((lastWindow) => {
      lastWindow.setPreferredOrientation(isLandscape ? window.Orientation.LANDSCAPE : window.Orientation.PORTRAIT)
    });
  }

最终代码示例如下:

controller: web_webview.WebviewController = new web_webview.WebviewController();
// 改变设备横竖屏状态函数
  private changeOrientation(isLandscape: boolean) {
    // 获取UIAbility实例的上下文信息
    let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
    // 调用该接口手动改变设备横竖屏状态
    window.getLastWindow(context).then((lastWindow) => {
      lastWindow.setPreferredOrientation(isLandscape ? window.Orientation.LANDSCAPE : window.Orientation.PORTRAIT)
    });
  }

  build() {
    Column() {
      Web({ src: 'https://consumer.huawei.com/content/dam/huawei-cbg-site/cn/mkt/harmonyos-next/videos/1025/harmonyos-next-pv-video-popup.mp4', controller: this.controller })
        .javaScriptAccess(true)
        .domStorageAccess(true)
        .onFullScreenEnter((event) => {
          console.log("onFullScreenEnter...")
          this.changeOrientation(true);
        })
        .onFullScreenExit(() => {
          console.log("onFullScreenExit...")
          this.changeOrientation(false);
        })
    }.width('100%').height('100%')
  }

运行效果:

点击放大

1 回复

针对HarmonyOS 鸿蒙Next中Web组件的视频无法横屏全屏播放的问题,可尝试以下解决方案:

  1. 利用媒体查询接口:HarmonyOS提供了媒体查询接口,可以在Web组件的onFullScreenEnter和onFullScreenExit回调中监听全屏状态,并使用媒体查询接口检测设备横屏状态,从而调整页面布局和视频宽高以适应全屏。
  2. 编程方式控制:通过编程方式,如使用@ohos.multimedia.media组件和@ohos.window接口,可以编写代码控制视频的播放窗口在全屏与非全屏状态之间切换。这包括初始化视频播放器、设置全屏播放动画及调用窗口对象的相关方法。
  3. 监听窗口尺寸变化:通过监听窗口尺寸的变化,在尺寸变化触发回调函数中执行相应的尺寸修改逻辑,以确保视频在全屏模式下正确显示。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部