HarmonyOS鸿蒙Next中如何屏蔽小艺悬浮窗防止考试作弊,disableSystemServiceMenuItems无法禁掉系统级浮窗
HarmonyOS鸿蒙Next中如何屏蔽小艺悬浮窗防止考试作弊,disableSystemServiceMenuItems无法禁掉系统级浮窗 【问题描述】
我们做一个考试的app;在考试的时候用户可以通过小艺进行舞弊,我们的需求是怎么屏蔽小艺;通过disableSystemServiceMenuItems 不能禁掉小艺悬浮窗 / 系统级浮窗作弊。

【版本信息】:开发工具版本:6.0、手机系统版本:6.0、Api语言版本:20
更多关于HarmonyOS鸿蒙Next中如何屏蔽小艺悬浮窗防止考试作弊,disableSystemServiceMenuItems无法禁掉系统级浮窗的实战教程也可以访问 https://www.itying.com/category-93-b0.html
开发者你好,小艺APP当前仅支持通过系统-设置的方式来打开或者关闭;
如不满足,请详细描述一下您这边的诉求。
更多关于HarmonyOS鸿蒙Next中如何屏蔽小艺悬浮窗防止考试作弊,disableSystemServiceMenuItems无法禁掉系统级浮窗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
【背景知识】
- on(‘windowEvent’):可通过on(‘windowEvent’)监听窗口的生命周期变化。
【解决方案】
可通过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完全阻止其显示。需在系统设置中关闭“小艺”的“显示在其他应用上层”权限(路径:设置 > 应用 > 小艺 > 显示在其他应用上层 > 关闭)。应用可跳转至该设置页:使用SettingsDataHelper的ACTION_APPLICATION_DETAILS_SETTINGS配合包名。
系统级浮窗(如小艺悬浮球)由系统UI进程管理,其权限高于普通应用。disableSystemServiceMenuItems 仅禁用系统导航栏/状态栏的部分菜单项,无法干涉系统级浮窗的显示与交互。HarmonyOS Next出于安全与用户体验考虑,不向第三方应用开放关闭系统悬浮窗的接口,因此您无法通过任何API屏蔽小艺,这是设计约束而非缺陷。


