背景与目标
轻规划(AeroPlan)涉及人生规划、财务状况和习惯追踪等敏感信息。在拥挤地铁、公交或公共办公室中,用户使用手机时旁人可能突然窥视,传统应用最多只能手动密码锁,无法处理使用中的动态偷窥。轻规划集成 HarmonyOS NEXT 原生 Device Security Kit 设备安全套件,开启 AI 防窥保护。开启后,系统借助前置摄像头与端侧 NPU 做人脸朝向与视线交叠检测;当屏幕正面出现非机主另一张面孔,且视线焦点投射屏幕超过 0.8 秒,判定为旁人偷窥,毫秒级对愿景九宫格看板覆盖高强度毛玻璃滤镜并弹出隐私警示;旁人收回视线后界面秒级恢复。数据在端侧沙箱处理,不保存图像,不上云。
架构与数据管线
整体分四层:硬件感知层用前置红外与可见光摄像头采集人脸及眼部特征视频帧;端侧计算层由 NPU 做实时人脸检测、人脸比对和视线估计,过程在受保护内存沙箱,不落盘、不联网;系统决策层由 Device Security Kit 的 PeepingDetector 计算非机主眼球视线向量与手机屏幕平面的几何相交,判断持续时间是否超过稳定性阈值,例如 0.8 秒,触发后向已订阅的前台应用发送广播事件;应用阻断层由轻规划接收警告后,通过 AppStorage 驱动 ArkUI 声明式渲染树重构,动态加载 backdropFilter 硬件加速模糊组件,秒级屏蔽敏感区域。
为什么用 Device Security Kit 的视线追踪
传统防窥多为静态防御或物理限制,无法应对用户使用过程中的动态背后窥屏。原文对比后选择 Device Security Kit 视线追踪,以较小用户打扰度实现针对视线污染的智能拦截。这里的关键是系统级 PeepingDetector 负责视线判定,应用只订阅结果并做 UI 阻断,避免应用自行采集和处理原始图像。
PeepingDetector 初始化与监听
防窥保护需要申请前置相机权限,并初始化 PeepingDetector。核心接口:subscribe(detectorId: string, callback: Callback<PeepingResult>): void 订阅防窥检测服务,detectorId 建议唯一标识当前应用或业务模块;unsubscribe(detectorId: string): void 注销订阅,应用切后台或销毁时必须调用以释放底层传感器;PeepingResult.isPeeping 为布尔值,true 表示系统判定当前有非机主面孔注视屏幕且持续时间超过安全阈值,false 表示危机解除。下面代码片段保留原文的权限申请、订阅与状态分发逻辑:- import { peepingDetector } from '@kit.DeviceSecurityKit';
- import { abilityAccessCtrl } from '@kit.AbilityKit';
- const atManager = abilityAccessCtrl.createAtManager();
- const grantResult = await atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA']);
- if (grantResult.authResults[0] !== 0) {
- return false;
- }
- peepingDetector.subscribe(detectorId, (result: peepingDetector.PeepingResult) => {
- AppStorage.setOrCreate('isPeepingState', result.isPeeping);
- });
复制代码 注意 unsubscribe 与生命周期绑定,避免重复订阅和底层回调泄漏。
ArkUI 毛玻璃阻断层
前台页面使用 @StorageLink('isPeepingState') 监听偷窥警告。触发后,利用 ArkUI 的 backdropFilter 对敏感愿景看板做毛玻璃化拦截。backdropFilter 可对组件边界内背后已渲染像素应用图形效果,常见为高斯模糊。相比覆盖模糊图片或预渲染离屏模糊,它具备实时动态性和硬件级加速:背景数据动画时仍能以 60fps/120fps 重采样模糊;ArkGraphics2D 会将模糊计算编译为 GPU 着色器指令,避免 CPU 像素遍历。实现上采用 Stack 布局,敏感数据层置底,阻断层置顶,并通过条件渲染减少无谓布局。- @StorageLink('isPeepingState') isPeepingState: boolean = false;
- if (this.isPeepingState) {
- Column() {
- Image($r('app.media.ic_shield_alert')).width(64).height(64);
- Text('AI 检测到旁人窥屏中').fontColor('#FFFFFF');
- }
- .width('100%')
- .height('100%')
- .justifyContent(FlexAlign.Center)
- .backdropFilter({ radius: 30 })
- .backgroundColor('rgba(0,0,0,0.65)')
- .borderRadius(12)
- .transition(TransitionEffect.OPACITY.animation({ duration: 250 }))
- }
复制代码 原文中,radius 越大,背后信息越难识别;65% 不透明度黑色遮罩使白色提示更清晰;圆角保持 12 与外层容器一致;250ms 淡入淡出缓和视觉跳变。
生命周期与功耗避坑
Device Security Kit 的防窥检测会调用前置相机和端侧 NPU 做高频推理,若不加限制,功耗不可忽视。若应用切后台、分屏不可见或锁屏时未熔断,相机数据流和特征比对可能继续运行。因此要采用“前台开启,后台挂起,锁屏熔断”的生命周期管理:onPageShow 启动检测,onPageHide 停止检测并重置 AppStorage 中的 isPeepingState。重置为 false 的原因是,用户被窥屏时突然锁屏或切后台,状态可能保持 true,重新进入时界面会继续模糊,给机主造成卡顿或故障错觉。- onPageShow() {
- this.privacyGuard.startDetection(getContext(this) as common.UIAbilityContext);
- }
- onPageHide() {
- this.privacyGuard.stopDetection();
- AppStorage.setOrCreate('isPeepingState', false);
- }
复制代码 原文给出的数据是,这一管控让后台能耗从 4.2mA 降至 0.0mA。
小结
轻规划通过 Device Security Kit 与 ArkUI backdropFilter 声明式遮罩,实现 AI 防窥闭环:系统侧完成视线追踪和 PeepingDetector 判定,应用侧用 AppStorage 驱动条件渲染和硬件加速毛玻璃阻断,并用生命周期钩子做传感器挂起与状态复位。下期原文预告将进入 Agent Framework Kit,用小艺智能体进行项目清单自动体检与打分。 |