HarmonyOS 鸿蒙Next中子窗口调用maximize()方法报Unauthorized operation.(api17)

HarmonyOS 鸿蒙Next中子窗口调用maximize()方法报Unauthorized operation.(api17)

// 子窗口
Image($r('app.media.maximum_window'))
  .height(20)
  .width(20)
  .onClick(() => {
    if (canIUse("SystemCapability.Window.SessionManager")) {
      let w = window.findWindow(this.getUIContext().getWindowName())
      w.maximize(window.MaximizePresentation.EXIT_IMMERSIVE)     
    }
  })

需要怎么解决呢?


更多关于HarmonyOS 鸿蒙Next中子窗口调用maximize()方法报Unauthorized operation.(api17)的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

cke_21538.png

可以参考以下示例进行定位排查 

@Entry
@Component
struct Index {
  @State subWindowClass: window.Window | undefined = undefined;

  build() {
    Column() {
      Button('创建子窗口')
        .onClick(() => {
          let windowStage = AppStorage.get('windowStage') as window.WindowStage;
          try {
            let options: window.SubWindowOptions = {
              title: "",
              decorEnabled: true,
              isModal: false,
              maximizeSupported: true
            };
            windowStage.createSubWindowWithOptions('mySubWindow', options).then((windowClass) => {
              windowClass.setResizeByDragEnabled(true, (err: BusinessError) => {
                console.log("设置拖拽缩放", `报错信息:${err.code}, ${err.message}`)
              })
              this.subWindowClass = windowClass
              windowClass.loadContent('pages/MySubWindow', null)
              windowClass.moveWindowTo(300, 400);
              // 设置子窗口大小
              windowClass.resize(this.getUIContext().vp2px(200), this.getUIContext().vp2px(200));
              // 展示子窗口
              windowClass.showWindow();
              console.info(`Succeeded in creating the subwindow. Data: ${JSON.stringify(windowClass)}`);
            }).catch((err: BusinessError) => {
              console.error(`Failed to create the subwindow. Cause code: ${err.code}, message: ${err.message}`);
            });
          } catch (exception) {
            console.error(`Failed to create the subwindow. Cause code: ${exception.code}, message: ${exception.message}`);
          }
        })
      Button('设置窗口最大化')
        .onClick(() => {
          this.subWindowClass?.maximize(window.MaximizePresentation.FOLLOW_APP_IMMERSIVE_SETTING).then(() => {
            console.log('Succeeded in maximizing the window.');
          }).catch((err: BusinessError) => {
            console.error(`Failed to maximize the window. Cause code: ${err.code}, message: ${err.message}`);
          });
        });
    }
    .justifyContent(FlexAlign.Center)
    .height('100%')
    .width('100%')
  }
}

相关文档:【设置应用启动时的窗口模式、大小与位置】

更多关于HarmonyOS 鸿蒙Next中子窗口调用maximize()方法报Unauthorized operation.(api17)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-window-window#maximize12

主窗口可调用此接口实现最大化功能;子窗口需在创建时设置子窗口参数maximizeSupported为true,再调用此接口可实现最大化功能。

在HarmonyOS Next API 17中,子窗口调用maximize()方法报"Unauthorized operation"错误,是由于系统权限限制。子窗口默认不具备最大化权限,需要检查窗口类型配置。在窗口初始化时需设置正确的WindowType,某些类型子窗口不支持最大化操作。建议确认窗口配置参数是否符合系统规范,并验证当前API级别是否支持该操作。

在HarmonyOS Next API 17中,子窗口调用maximize()方法报"Unauthorized operation"错误,通常是因为窗口权限配置问题。需要检查以下配置:

  1. 在module.json5配置文件中添加窗口权限:
"requestPermissions": [
  {
    "name": "ohos.permission.SYSTEM_FLOAT_WINDOW"
  }
]
  1. 确保子窗口创建时设置了正确的窗口类型:
let windowClass = null
let config = {
  name: "subWindow",
  windowType: window.WindowType.TYPE_FLOAT,
  // 其他配置参数
}
  1. 检查窗口管理器能力声明: 在module.json5的"abilities"中确保包含:
"supportWindowMode": ["fullscreen", "split", "float"]
  1. 调用maximize前验证窗口状态:
if (w && w.isShowing()) {
  w.maximize(window.MaximizePresentation.EXIT_IMMERSIVE)
}

权限配置完成后,需要重新编译安装应用。如果问题仍然存在,检查系统是否授予了悬浮窗权限。

回到顶部