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中,可通过WindowExtensionAbility
或WindowStage
的setWindowPrivacyMode(true)
方法实现防截屏。该设置会阻止系统截图和录屏功能,并在尝试截屏时返回黑屏/空白内容。开发者需在UIAbility的onWindowStageCreate
阶段调用,或在自定义窗口组件中配置。隐私模式同时会禁用系统导航栏的截图快捷操作。
在HarmonyOS Next中实现防截屏功能可以通过以下方式:
- 使用WindowManager的setWindowFlags方法:
getWindow().addFlags(WindowManager.LayoutConfig.FLAG_SECURE);
- 对于Ability场景,可以在onWindowFocusChanged回调中设置:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(hasFocus) {
getWindow().addFlags(WindowManager.LayoutConfig.FLAG_SECURE);
}
}
- 针对特定页面组件,可以通过设置布局属性:
<DirectionalLayout
...
ohos:security_layout="true">
注意:
- 此设置会同时禁用截屏和录屏功能
- 系统级截屏(如通过ADB)仍可能绕过此限制
- 建议在敏感数据展示的页面使用,不要全局设置
实现后,当用户尝试截屏时会收到"不允许截屏"的提示。