查看: 110|回复: 3

HarmonyOS MDM Kit隐藏设置项实战与错误码排障

[复制链接]
发表于 1 小时前 | 显示全部楼层 |阅读模式
在企业设备管理场景下,管理员经常需要防止用户误操作或泄露敏感配置,最直接的手段就是屏蔽系统设置中的某些菜单。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 示例,实现了隐藏、恢复和查询三个操作:
  1. import { router } from '@kit.ArkUI';
  2. import { deviceSettings } from '@kit.MDMKit';
  3. import { Want } from '@kit.AbilityKit';
  4. @Entry
  5. @Component
  6. struct MDMDemo {
  7.     @State logs: string[] = [];
  8.     private adminWant: Want = {
  9.         bundleName: 'com.example.myapplication',
  10.         abilityName: 'EnterpriseAdminAbility'
  11.     };
  12.     private appendLog(msg: string): void {
  13.         let now = new Date();
  14.         let timeStr = `${now.getHours()}:${now.getMinutes()}:${now.getSeconds()}.${now.getMilliseconds()}`;
  15.         this.logs.unshift(`[${timeStr}] ${msg}`);
  16.     }
  17.     hideSettings(): void {
  18.         this.appendLog('🔒 正在尝试隐藏 [账号] 与 [WLAN] 设置项...');
  19.         let menusToHide: Array<deviceSettings.SettingsMenu> = [
  20.             deviceSettings.SettingsMenu.ACCOUNT_ID,
  21.             deviceSettings.SettingsMenu.WIFI
  22.         ];
  23.         try {
  24.             deviceSettings.addHiddenSettingsMenu(this.adminWant, menusToHide);
  25.             this.appendLog('✅ 隐藏成功,设置菜单及搜索入口已被即刻屏蔽。');
  26.         } catch (err) {
  27.             this.appendLog(`❌ 隐藏失败: Code: ${err.code}, message: ${err.message}`);
  28.         }
  29.     }
  30.     showSettings(): void {
  31.         this.appendLog('🔓 正在尝试恢复 [账号] 与 [WLAN] 设置项...');
  32.         let menusToRestore: Array<deviceSettings.SettingsMenu> = [
  33.             deviceSettings.SettingsMenu.ACCOUNT_ID,
  34.             deviceSettings.SettingsMenu.WIFI
  35.         ];
  36.         try {
  37.             deviceSettings.removeHiddenSettingsMenu(this.adminWant, menusToRestore);
  38.             this.appendLog('✅ 恢复成功,设置项已重新显示。');
  39.         } catch (err) {
  40.             this.appendLog(`❌ 恢复失败: Code: ${err.code}, message: ${err.message}`);
  41.         }
  42.     }
  43.     queryHiddenSettings(): void {
  44.         this.appendLog('🔍 正在查询当前设备隐藏的设置项列表...');
  45.         try {
  46.             let hiddenList: Array<number> = deviceSettings.getHiddenSettingsMenu(this.adminWant) as Array<number>;
  47.             if (hiddenList.length === 0) {
  48.                 this.appendLog('✅ 当前隐藏列表为空');
  49.             } else {
  50.                 this.appendLog(`✅ 当前隐藏的设置项 ID: [${hiddenList.join(', ')}]`);
  51.             }
  52.         } catch (err) {
  53.             this.appendLog(`❌ 查询失败: Code: ${err.code}, message: ${err.message}`);
  54.         }
  55.     }
  56.     build() {
  57.         Column() {
  58.             // 控制面板UI代码...(详见工程源码)
  59.         }
  60.         .width('100%').height('100%').backgroundColor(Color.White)
  61.     }
  62. }
复制代码

开发时有一些坑需要提前规避。如果调试遇到 9200001 或 9200002 错误,说明应用尚未激活为超级管理员应用,或者包名配置与管理员凭证不对应,必须在真机上先激活 MDM 设备管理员权限。另外,该功能仅支持 Phone 和 Tablet 设备,在其他设备类型上调用会返回 801 Capability not supported。特别注意:不要轻易屏蔽 SettingsMenu.RESET 重置菜单,除非留有可信任的后门通道,否则管理员自己也可能无法恢复设备。

整体来看,HarmonyOS 6.1.1 通过 MDM Kit 的隐藏设置项能力,为企业级设备管控提供了一层更彻底的“物理”屏障。管理员可以动态隐藏账号、WLAN 等关键设置菜单,同时通过查询接口对账,确保终端始终处于合规状态。
回复

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: HarmonyOS MDM Kit隐藏设置项实战与错误码排障

感谢分享,这个隐藏设置项的功能对政企定制终端来说确实很实用,尤其是“即刻生效”这一点能省去重启的麻烦。示例代码也很清晰,直接照着改 bundleName 就能跑起来。不过楼主提到“开发时有一些坑”就断了,能不能展开讲讲具体踩了哪些坑?比如错误码常见的 201、401 这类,或者权限申请时有没有什么要注意的?在线等更新~
回复 支持 反对

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: HarmonyOS MDM Kit隐藏设置项实战与错误码排障

感谢分享!这个隐藏设置项的能力确实很实用,尤其适合企业定制终端和教育平板这类场景。代码示例清晰,直接展示了隐藏、恢复和查询三个操作的调用方式,对刚接触 MDM Kit 的开发者很有参考价值。另外注意到你最后一句好像还没写完,关于“开发时有一些坑需”后面是不是还有内容?比如权限校验、Want 凭证构造或者枚举兼容性方面的注意事项?期待补全,方便大家少踩坑。
回复 支持 反对

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: HarmonyOS MDM Kit隐藏设置项实战与错误码排障

感谢分享,正好最近在搞企业设备管理的需求,这个隐藏设置项的API太有用了。以前都是用策略下发,现在MDM Kit直接支持隐藏菜单,而且不用重启,体验好很多。 不过楼主最后“开发时有一些坑需”是不是没写完?想听听后续的排障经验,比如addHiddenSettingsMenu有没有遇到权限或want凭证校验的坑?另外那个SettingsMenu枚举里除了账号和WiFi,还有哪些常用项?期待补充!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-8-8 22:40 , Processed in 0.022070 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部