HarmonyOS鸿蒙Next中如何屏蔽小艺悬浮窗防止考试作弊,disableSystemServiceMenuItems无法禁掉系统级浮窗

HarmonyOS鸿蒙Next中如何屏蔽小艺悬浮窗防止考试作弊,disableSystemServiceMenuItems无法禁掉系统级浮窗 【问题描述】

我们做一个考试的app;在考试的时候用户可以通过小艺进行舞弊,我们的需求是怎么屏蔽小艺;通过disableSystemServiceMenuItems 不能禁掉小艺悬浮窗 / 系统级浮窗作弊。

cke_2988.png

【版本信息】:开发工具版本:6.0、手机系统版本:6.0、Api语言版本:20


更多关于HarmonyOS鸿蒙Next中如何屏蔽小艺悬浮窗防止考试作弊,disableSystemServiceMenuItems无法禁掉系统级浮窗的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

开发者你好,小艺APP当前仅支持通过系统-设置的方式来打开或者关闭;
如不满足,请详细描述一下您这边的诉求。

更多关于HarmonyOS鸿蒙Next中如何屏蔽小艺悬浮窗防止考试作弊,disableSystemServiceMenuItems无法禁掉系统级浮窗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


【背景知识】

【解决方案】

可通过on(‘windowEvent’)监听窗口的生命周期变化,其返回值2为获焦,值为3时为失焦状态。应用被其他窗口遮挡或者覆盖导致的失焦,都可以进行监听处理。

import { UIAbility } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';
import { BusinessError } from '@ohos.base';

const DOMAIN = 0x0000;

export default class EntryAbility extends UIAbility {
  onDestroy(): void {
    hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onDestroy');
  }

  onWindowStageCreate(windowStage: window.WindowStage): void {
    window.getLastWindow(this.context, (err: BusinessError, data) => {
      let windowClass = data;
      windowClass.on('windowEvent', (data) => {
        if (data === 2) {
          
        } else if (data === 3) {
          
        }
      });
    });
    AppStorage.setOrCreate('windowStage', windowStage);
    windowStage.loadContent('pages/Index', (err) => {
      if (err.code) {
        hilog.error(DOMAIN, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err));
        return;
      }
      hilog.info(DOMAIN, 'testTag', 'Succeeded in loading the content.');
    });
  }

  onWindowStageDestroy(): void {
    // Main window is destroyed, release UI related resources
    hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
  }

  onForeground(): void {
    // Ability has brought to foreground
    hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onForeground');
  }

  onBackground(): void {
    // Ability has back to background
    hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onBackground');
  }
};

老师,我们是想禁止系统小艺AI弹出

好的,问题已收到,正在处理中。

disableSystemServiceMenuItems 只作用于文本选择菜单里的系统服务项,不是全局禁用小艺或系统级悬浮窗的接口。普通三方应用通常不能强行关闭系统助手/系统悬浮窗,这类能力涉及系统权限和用户控制。考试场景建议改成风控策略:监听前后台/失焦/截屏录屏等可获得的事件,进入考试前提示关闭相关辅助入口,异常时暂停考试或标记风险;如果是企业/教育管控设备,需要走设备管控/MDM 或官方考试机方案,而不是在普通应用内自行屏蔽系统服务。

一些建议:

  • 禁止截屏?
  • 允许返回后台?
  • 允许失去焦点?

可以考虑下。

在鸿蒙Next中,disableSystemServiceMenuItems仅禁用系统菜单项,无法屏蔽系统级悬浮窗。小艺悬浮窗属于系统UI,应用层无法通过API完全阻止其显示。需在系统设置中关闭“小艺”的“显示在其他应用上层”权限(路径:设置 > 应用 > 小艺 > 显示在其他应用上层 > 关闭)。应用可跳转至该设置页:使用SettingsDataHelperACTION_APPLICATION_DETAILS_SETTINGS配合包名。

系统级浮窗(如小艺悬浮球)由系统UI进程管理,其权限高于普通应用。disableSystemServiceMenuItems 仅禁用系统导航栏/状态栏的部分菜单项,无法干涉系统级浮窗的显示与交互。HarmonyOS Next出于安全与用户体验考虑,不向第三方应用开放关闭系统悬浮窗的接口,因此您无法通过任何API屏蔽小艺,这是设计约束而非缺陷。

回到顶部