面对这一痛点HarmonyOS SDK设备安全服务Device Security Kit提供了防窥保护能力支持应用通过系统智能判断将长期通过人脸解锁手机的人作为防窥保护的机主并通过传感器判断设备周边环境根据屏幕被窥视状态提供风险提示比如在非机主状态下不进行个性化推荐同时拉起系统级蒙层遮盖窗口从而隐藏浏览记录、支付记录、收藏记录等敏感信息保护机主隐私。机主查看相册当有非机主偷窥时拉起系统蒙层遮盖窗口那么应用内如何能够实现防窥保护功能呢前提条件设备侧需要满足一些条件。首先用户需要在设备内开启人脸识别并录入人脸信息其次设备上需要存在防窥保护选项开发者可通过在设备上选择“设置 隐私与安全 防窥保护”查看防窥保护选项。系统版本需满足以下条件HarmonyOS系统需在HarmonyOS 6.0.0 Beta1及以上DevEco Studio版本需在6.0.0 Beta1及以上HarmonyOS SDK版本需在 6.0.0 Beta1 SDK及以上。此外用户使用该能力时还需要注意一些约束与限制由于防窥保护功能通过传感器智能判断判断用户周边环境因此为了避免识别误差在使用过程中人脸距离设备需在一定的范围内且人脸没有遮挡周围环境光线充足。业务流程开发步骤导入防窥保护模块及相关公共模块。import { dlpAntiPeep } from kit.DeviceSecurityKit; import { window } from kit.ArkUI; import { common } from kit.AbilityKit;调用检查接口确认当前应用是否开启防窥保护开启防窥保护时调用防窥保护订阅接口获取窥视状态信息。Entry Component struct Index { State message: string DlpAntiPeep; private hasShownMask: boolean false; // 防窥状态变化回调 private onStatusChange async (status: dlpAntiPeep.DlpAntiPeepStatus): Promisevoid { if (status dlpAntiPeep.DlpAntiPeepStatus.PASS) { // 表示当前状态为无人窥视 console.info(DlpAntiPeepStatus is PASS.); } else if (status dlpAntiPeep.DlpAntiPeepStatus.HIDE) { // 表示有人在窥屏应用可以进行隐私保护操作。 console.info(DlpAntiPeepStatus is HIDE.); if (!this.hasShownMask) { await this.setMaskLayer(); // 拉起系统蒙层 } } } // 检查防窥保护开关并订阅通知 async aboutToAppear() { try { const isOpen await dlpAntiPeep.isDlpAntiPeepSwitchOn(); if (isOpen) { dlpAntiPeep.on(dlpAntiPeep, this.onStatusChange); } else { // 开关未开启引导用户设置 const context this.getUIContext().getHostContext() as common.UIAbilityContext; const result await dlpAntiPeep.requestAntiPeepOptions(context); if (result dlpAntiPeep.AntiPeepOptionsResult.SUCCESS || result dlpAntiPeep.AntiPeepOptionsResult.ALREADY_ON) { // 表示防窥保护开关开启成功或已开启 dlpAntiPeep.on(dlpAntiPeep, this.onStatusChange); } } } catch (error) { console.error(Failed to init DlpAntiPeep. Code: ${error.code}, message: ${error.message}); } } // 取消订阅防窥保护通知 aboutToDisappear() { try { dlpAntiPeep.off(dlpAntiPeep, this.onStatusChange); } catch (error) { console.error(Failed to off DlpAntiPeep. Code: ${error.code}, message: ${error.message}); } } onPageShow() { console.info(Page shown, reset mask flag); this.hasShownMask false; } // 拉起系统蒙层 private async setMaskLayer(): Promisevoid { try { const context this.getUIContext().getHostContext() as common.UIAbilityContext; const windowClass await window.getLastWindow(context); const windowId windowClass.getWindowProperties().id; await dlpAntiPeep.setAntiPeepMaskLayer(windowId); this.hasShownMask true; // 避免窥视状态时频繁拉起蒙层 } catch (error) { console.error(Failed to set AntiPeep MaskLayer. Code: ${error.code}, message: ${error.message}); } } build() { Column() { Text(this.message) .fontSize(20) .margin(20) } .width(100%) .height(100%) .justifyContent(FlexAlign.Center) } }
应用内隐私信息被窥视?防窥保护自动感知一键防护
面对这一痛点HarmonyOS SDK设备安全服务Device Security Kit提供了防窥保护能力支持应用通过系统智能判断将长期通过人脸解锁手机的人作为防窥保护的机主并通过传感器判断设备周边环境根据屏幕被窥视状态提供风险提示比如在非机主状态下不进行个性化推荐同时拉起系统级蒙层遮盖窗口从而隐藏浏览记录、支付记录、收藏记录等敏感信息保护机主隐私。机主查看相册当有非机主偷窥时拉起系统蒙层遮盖窗口那么应用内如何能够实现防窥保护功能呢前提条件设备侧需要满足一些条件。首先用户需要在设备内开启人脸识别并录入人脸信息其次设备上需要存在防窥保护选项开发者可通过在设备上选择“设置 隐私与安全 防窥保护”查看防窥保护选项。系统版本需满足以下条件HarmonyOS系统需在HarmonyOS 6.0.0 Beta1及以上DevEco Studio版本需在6.0.0 Beta1及以上HarmonyOS SDK版本需在 6.0.0 Beta1 SDK及以上。此外用户使用该能力时还需要注意一些约束与限制由于防窥保护功能通过传感器智能判断判断用户周边环境因此为了避免识别误差在使用过程中人脸距离设备需在一定的范围内且人脸没有遮挡周围环境光线充足。业务流程开发步骤导入防窥保护模块及相关公共模块。import { dlpAntiPeep } from kit.DeviceSecurityKit; import { window } from kit.ArkUI; import { common } from kit.AbilityKit;调用检查接口确认当前应用是否开启防窥保护开启防窥保护时调用防窥保护订阅接口获取窥视状态信息。Entry Component struct Index { State message: string DlpAntiPeep; private hasShownMask: boolean false; // 防窥状态变化回调 private onStatusChange async (status: dlpAntiPeep.DlpAntiPeepStatus): Promisevoid { if (status dlpAntiPeep.DlpAntiPeepStatus.PASS) { // 表示当前状态为无人窥视 console.info(DlpAntiPeepStatus is PASS.); } else if (status dlpAntiPeep.DlpAntiPeepStatus.HIDE) { // 表示有人在窥屏应用可以进行隐私保护操作。 console.info(DlpAntiPeepStatus is HIDE.); if (!this.hasShownMask) { await this.setMaskLayer(); // 拉起系统蒙层 } } } // 检查防窥保护开关并订阅通知 async aboutToAppear() { try { const isOpen await dlpAntiPeep.isDlpAntiPeepSwitchOn(); if (isOpen) { dlpAntiPeep.on(dlpAntiPeep, this.onStatusChange); } else { // 开关未开启引导用户设置 const context this.getUIContext().getHostContext() as common.UIAbilityContext; const result await dlpAntiPeep.requestAntiPeepOptions(context); if (result dlpAntiPeep.AntiPeepOptionsResult.SUCCESS || result dlpAntiPeep.AntiPeepOptionsResult.ALREADY_ON) { // 表示防窥保护开关开启成功或已开启 dlpAntiPeep.on(dlpAntiPeep, this.onStatusChange); } } } catch (error) { console.error(Failed to init DlpAntiPeep. Code: ${error.code}, message: ${error.message}); } } // 取消订阅防窥保护通知 aboutToDisappear() { try { dlpAntiPeep.off(dlpAntiPeep, this.onStatusChange); } catch (error) { console.error(Failed to off DlpAntiPeep. Code: ${error.code}, message: ${error.message}); } } onPageShow() { console.info(Page shown, reset mask flag); this.hasShownMask false; } // 拉起系统蒙层 private async setMaskLayer(): Promisevoid { try { const context this.getUIContext().getHostContext() as common.UIAbilityContext; const windowClass await window.getLastWindow(context); const windowId windowClass.getWindowProperties().id; await dlpAntiPeep.setAntiPeepMaskLayer(windowId); this.hasShownMask true; // 避免窥视状态时频繁拉起蒙层 } catch (error) { console.error(Failed to set AntiPeep MaskLayer. Code: ${error.code}, message: ${error.message}); } } build() { Column() { Text(this.message) .fontSize(20) .margin(20) } .width(100%) .height(100%) .justifyContent(FlexAlign.Center) } }