HarmonyOS 鸿蒙Next中如何实现防截屏功能?

HarmonyOS 鸿蒙Next中如何实现防截屏功能? 如何实现应用防截屏功能?如银行部分账户信息页面禁止截屏

5 回复

防截屏,官网提供了详细的demo,可以参考下:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs/faqs-arkui-3

更多关于HarmonyOS 鸿蒙Next中如何实现防截屏功能?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


学习了,

module.json5文件中添加权限声明:

{
  "requestPermissions": [
    {
      "name": "ohos.permission.PRIVACY_WINDOW"
    }
  ]
}

在需要保护的页面(如银行账户页)生命周期中控制隐私模式:

import { window } from '@kit.ArkUI';

// 页面显示时开启隐私模式
onPageShow(): void {
  window.getLastWindow(this.getUIContext().getHostContext())
    .then((windowStage: window.Window) => {
      windowStage.setWindowPrivacyMode(true);
    });
}

// 页面隐藏时关闭隐私模式
onPageHide(): void {
  window.getLastWindow(this.getUIContext().getHostContext())
    .then((windowStage: window.Window) => {
      windowStage.setWindowPrivacyMode(false);
    });
}

在HarmonyOS Next中,可通过WindowExtensionAbilityWindowStagesetWindowPrivacyMode(true)方法实现防截屏。该设置会阻止系统截图和录屏功能,并在尝试截屏时返回黑屏/空白内容。开发者需在UIAbility的onWindowStageCreate阶段调用,或在自定义窗口组件中配置。隐私模式同时会禁用系统导航栏的截图快捷操作。

在HarmonyOS Next中实现防截屏功能可以通过以下方式:

  1. 使用WindowManager的setWindowFlags方法:
getWindow().addFlags(WindowManager.LayoutConfig.FLAG_SECURE);
  1. 对于Ability场景,可以在onWindowFocusChanged回调中设置:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if(hasFocus) {
        getWindow().addFlags(WindowManager.LayoutConfig.FLAG_SECURE);
    }
}
  1. 针对特定页面组件,可以通过设置布局属性:
<DirectionalLayout
    ...
    ohos:security_layout="true">

注意:

  1. 此设置会同时禁用截屏和录屏功能
  2. 系统级截屏(如通过ADB)仍可能绕过此限制
  3. 建议在敏感数据展示的页面使用,不要全局设置

实现后,当用户尝试截屏时会收到"不允许截屏"的提示。

回到顶部