HarmonyOS鸿蒙Next中使用windowStage.createSubWindow创建悬浮窗出现Error

HarmonyOS鸿蒙Next中使用windowStage.createSubWindow创建悬浮窗出现Error 我使用windowStage.createSubWindow想要创建一个全局的悬浮窗,crash了

@Entry
@Component
struct Index {
  build() {
    Column(){
      Button('测试')
        .onClick(() => {
          this.createFloatWindow()
        })
    }
  }

  // 自定义创建悬浮窗方法
  createFloatWindow() {
    // 窗口类型设置为window.WindowType.TYPE_FLOAT
    let windowStage = AppStorage.get("windowStage") as window.WindowStage;
    // 创建悬浮窗
    windowStage.createSubWindow("floatWindow", (err, win) => {
      if (err) {
        console.error('Failed to create the floatWindow. Cause: ' + JSON.stringify(err));
        return;
      }
      console.info('Succeeded in creating the floatWindow. Data: ' + JSON.stringify(win));

      // 设置悬浮窗位置
      win.moveWindowTo(300, 300, (err) => {
        if (err.code) {
          console.error('Failed to move the window. Cause:' + JSON.stringify(err));
          return;
        }
        console.info('Succeeded in moving the window.');
      });
      // 设置悬浮窗大小
      win.resize(200, 200, (err) => {
        if (err.code) {
          console.error('Failed to change the window size. Cause:' + JSON.stringify(err));
          return;
        }
      });
      // 为悬浮窗加载页面内容,这里可以设置在main_pages.json中配置的页面
      win.setUIContent("home/TestFloatCommon", (err: BusinessError) => {
        if (err.code) {
          console.error('Failed to load the content. Cause:' + JSON.stringify(err));
          return;
        }
        // 显示悬浮窗。
        win.showWindow((err: BusinessError) => {
          if (err.code) {
            console.error('Failed to show the window. Cause: ' + JSON.stringify(err));
            return;
          }
          console.info('Succeeded in showing the window.');
        });
      });

    });
  }

  // 自定义销毁悬浮窗方法
  destroyFloatWindow() {
    // 用windowClass调用destroyWindow销毁悬浮窗
    window.findWindow("floatWindow").destroyWindow((err) => {
      if (err.code) {
        console.error('Failed to destroy the window. Cause: ' + JSON.stringify(err));
        return;
      }
      console.info('Succeeded in destroying the window.');
    });
  }
}

更多关于HarmonyOS鸿蒙Next中使用windowStage.createSubWindow创建悬浮窗出现Error的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

createSubWindow下面if条件判断有问题,修改成if (err.code)即可。

windowStage.createSubWindow("floatWindow", (err, win) => {
  if (err.code) {
    console.error('Failed to create the floatWindow. Cause: ' + JSON.stringify(err));
    return;
  }
  console.info('Succeeded in creating the floatWindow. Data: ' + JSON.stringify(win));
}

更多关于HarmonyOS鸿蒙Next中使用windowStage.createSubWindow创建悬浮窗出现Error的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)Next中使用windowStage.createSubWindow创建悬浮窗时出现错误,可能是由于以下原因之一:

  1. 权限问题:悬浮窗的创建可能涉及到特定的系统权限,如ohos.permission.SYSTEM_FLOAT_WINDOW。如果应用未获得相关权限,调用createSubWindow时会抛出错误。

  2. 窗口配置问题createSubWindow方法需要正确的窗口配置参数,如窗口类型、尺寸、位置等。如果配置参数不符合系统要求或存在冲突,可能会导致创建失败。

  3. 系统限制:鸿蒙系统可能对悬浮窗的数量、尺寸、位置等有一定的限制。如果应用的请求超出了这些限制,createSubWindow将无法成功执行。

  4. 窗口状态冲突:如果主窗口或子窗口处于某些特殊状态(如最小化、销毁等),可能会导致createSubWindow调用失败。

  5. API版本兼容性:不同版本的鸿蒙系统可能对createSubWindow的实现有所不同。如果应用在低版本系统上使用高版本API,可能导致错误。

  6. 资源不足:系统资源(如内存、句柄等)不足时,可能导致悬浮窗创建失败。

建议检查代码中的权限申请、窗口配置参数、系统版本兼容性以及资源使用情况,以定位具体问题。

在HarmonyOS鸿蒙Next中,使用windowStage.createSubWindow创建悬浮窗时出现错误,可能由以下原因导致:

  1. 权限问题:确保应用已申请悬浮窗权限。
  2. API使用不当:检查createSubWindow的参数配置是否正确,如windowTypelayout等。
  3. 系统版本兼容性:确认鸿蒙Next版本支持该API。
  4. 资源限制:系统资源不足可能导致创建失败。

建议查看日志获取具体错误信息,并根据提示排查问题。

回到顶部