HarmonyOS鸿蒙Next中手机APP能实现系统级悬浮窗吗?

HarmonyOS鸿蒙Next中手机APP能实现系统级悬浮窗吗? 【问题描述】:在APP内点击开启悬浮球按钮后,窗口显示悬浮球,APP进入后台后,不影响悬浮球一直在前台显示。我们是需要一个Android悬浮窗功能,就是应用在后台的时候,我打开其他应用,然后使用悬浮窗可以录音,播放录音这样,类似悬浮窗录屏的功能,可以开启一个悬浮窗在其他应用控制录屏,打开录屏,关闭录屏这些

【问题现象】: cke_6203.png cke_5399.png

【尝试解决方案】:闪控球功能太局限了。应用内悬浮工具球是APP内窗口,APP退到后台后,就不显示了,我是要一直保持住前台显示。


更多关于HarmonyOS鸿蒙Next中手机APP能实现系统级悬浮窗吗?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

从鸿蒙安全性的角度分析目前还没有对外开放这个系统级的悬浮窗API。

这会严重影响其它APP的安全性。

更多关于HarmonyOS鸿蒙Next中手机APP能实现系统级悬浮窗吗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我也想知道,看有人实现了,是申请了系统级的权限吗?

在HarmonyOS Next中,应用可通过UIExtensionAbility机制实现系统级悬浮窗。具体使用WindowManager创建悬浮窗口,结合UIExtensionContext进行窗口属性配置与管理。需在module.json5中声明ohos.ability.UIExtensionAbility权限及相应元数据。系统悬浮窗受严格管控,必须申请相应权限并遵循HarmonyOS窗口管理规范。

在HarmonyOS Next中,可以通过系统级悬浮窗能力实现应用在后台时悬浮窗持续前台显示。具体实现方式如下:

  1. 使用UIExtensionAbility作为悬浮窗的载体,它独立于应用主进程,支持后台运行和跨应用显示。

  2. 通过WindowManager创建悬浮窗口:

    • 设置窗口类型为TYPE_FLOAT,并配置FLAG_NOT_FOCUSABLE等参数
    • 使用moveToresize方法控制窗口位置和大小
  3. 申请必要权限:

    • module.json5中声明ohos.permission.SYSTEM_FLOAT_WINDOW权限
    • 动态请求悬浮窗权限requestPermissionsFromUser
  4. 实现跨应用交互:

    • 通过UIExtensionContextstartAbility方法启动悬浮窗
    • 使用EventHubRPC进行应用与悬浮窗间的通信

示例代码框架:

// 创建悬浮窗口
let windowClass = null;
let config = {
  name: "float_window",
  windowType: WindowType.TYPE_FLOAT,
  ctx: this.context
};
windowClass = windowManager.createWindow(config);

// 设置窗口属性
windowClass.moveTo(100, 100);
windowClass.resize(300, 300);

// 加载悬浮窗UI
windowClass.loadContent("pages/FloatWindow", (err, data) => {
  if (err) {
    console.error('Failed to load the content. Error: ' + JSON.stringify(err));
    return;
  }
});

这种方案可以确保应用进入后台后,悬浮窗仍然保持在前台显示,并支持录音、播放等控制功能。

回到顶部