在企业设备管理场景下,管理员经常需要防止用户误操作或泄露敏感配置,最直接的手段就是屏蔽系统设置中的某些菜单。HarmonyOS 6.1.1(API 24)中,MDM Kit 的 deviceSettings 模块新增了隐藏设置项管理能力,支持对当前用户下被隐藏的设置项列表进行添加、删除、查询操作,而且调用即刻生效,无需重启设备。这让专用工作终端、教育平板等场景能够彻底隔绝非预期配置的篡改。
核心 API 有三个:addHiddenSettingsMenu(admin: Want, menusToHidden: Array<SettingsMenu>) 用于将指定设置项加入隐藏列表;removeHiddenSettingsMenu(admin: Want, menusToHidden: Array<SettingsMenu>) 用于从隐藏列表中移除设置项;getHiddenSettingsMenu(admin: Want) 用于同步拉取当前设备上已被隐藏的设置项列表。这些接口都要求 Stage 模型,并且应用需要具备 ohos.permission.ENTERPRISE_MANAGE_SETTINGS 权限。
在实际接入时,需要先构造企业管理员的 Want 凭证,再将目标菜单枚举传给接口。下面是一个可运行的 MDMDemo.ets 示例,实现了隐藏、恢复和查询三个操作:
- import { router } from '@kit.ArkUI';
- import { deviceSettings } from '@kit.MDMKit';
- import { Want } from '@kit.AbilityKit';
- @Entry
- @Component
- struct MDMDemo {
- @State logs: string[] = [];
- private adminWant: Want = {
- bundleName: 'com.example.myapplication',
- abilityName: 'EnterpriseAdminAbility'
- };
- private appendLog(msg: string): void {
- let now = new Date();
- let timeStr = `${now.getHours()}:${now.getMinutes()}:${now.getSeconds()}.${now.getMilliseconds()}`;
- this.logs.unshift(`[${timeStr}] ${msg}`);
- }
- hideSettings(): void {
- this.appendLog('🔒 正在尝试隐藏 [账号] 与 [WLAN] 设置项...');
- let menusToHide: Array<deviceSettings.SettingsMenu> = [
- deviceSettings.SettingsMenu.ACCOUNT_ID,
- deviceSettings.SettingsMenu.WIFI
- ];
- try {
- deviceSettings.addHiddenSettingsMenu(this.adminWant, menusToHide);
- this.appendLog('✅ 隐藏成功,设置菜单及搜索入口已被即刻屏蔽。');
- } catch (err) {
- this.appendLog(`❌ 隐藏失败: Code: ${err.code}, message: ${err.message}`);
- }
- }
- showSettings(): void {
- this.appendLog('🔓 正在尝试恢复 [账号] 与 [WLAN] 设置项...');
- let menusToRestore: Array<deviceSettings.SettingsMenu> = [
- deviceSettings.SettingsMenu.ACCOUNT_ID,
- deviceSettings.SettingsMenu.WIFI
- ];
- try {
- deviceSettings.removeHiddenSettingsMenu(this.adminWant, menusToRestore);
- this.appendLog('✅ 恢复成功,设置项已重新显示。');
- } catch (err) {
- this.appendLog(`❌ 恢复失败: Code: ${err.code}, message: ${err.message}`);
- }
- }
- queryHiddenSettings(): void {
- this.appendLog('🔍 正在查询当前设备隐藏的设置项列表...');
- try {
- let hiddenList: Array<number> = deviceSettings.getHiddenSettingsMenu(this.adminWant) as Array<number>;
- if (hiddenList.length === 0) {
- this.appendLog('✅ 当前隐藏列表为空');
- } else {
- this.appendLog(`✅ 当前隐藏的设置项 ID: [${hiddenList.join(', ')}]`);
- }
- } catch (err) {
- this.appendLog(`❌ 查询失败: Code: ${err.code}, message: ${err.message}`);
- }
- }
- build() {
- Column() {
- // 控制面板UI代码...(详见工程源码)
- }
- .width('100%').height('100%').backgroundColor(Color.White)
- }
- }
复制代码
开发时有一些坑需要提前规避。如果调试遇到 9200001 或 9200002 错误,说明应用尚未激活为超级管理员应用,或者包名配置与管理员凭证不对应,必须在真机上先激活 MDM 设备管理员权限。另外,该功能仅支持 Phone 和 Tablet 设备,在其他设备类型上调用会返回 801 Capability not supported。特别注意:不要轻易屏蔽 SettingsMenu.RESET 重置菜单,除非留有可信任的后门通道,否则管理员自己也可能无法恢复设备。
整体来看,HarmonyOS 6.1.1 通过 MDM Kit 的隐藏设置项能力,为企业级设备管控提供了一层更彻底的“物理”屏障。管理员可以动态隐藏账号、WLAN 等关键设置菜单,同时通过查询接口对账,确保终端始终处于合规状态。 |