HarmonyOS 鸿蒙Next 防录屏和防截屏功能实现

发布于 1周前 作者 yuanlaile 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 防录屏和防截屏功能实现

如何实现页面级别的防录屏和防截屏 在应用中,直播和回放画面是否允许用户留存,在设计上存在下述三种场景:

1. 允许截屏和录屏

2. 允许截屏,不允许录屏

3. 不允许截屏,且不允许录屏

请问是否有 API 实现上述场景2和3?若有,如何实现? 更进一步地,在小窗播放时,上述场景2和3是否也能实现?若有,如何实现?

2 回复
页面需要实现防截屏或者防录屏功能。首先需要在module.json5中申请隐私窗口权限。

然后在onPageShow()中获取当前窗口对象并设置隐私模式。

在退出页面的时候,在onPageHide()生命周期中取消隐私模式即可。

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-window-V5

参考代码:

//module.json5文件中

{

“name” : ‘ohos.permission.PRIVACY_WINDOW’

}<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

//EAbility文件中

onWindowStageCreate(windowStage: window.WindowStage): void {

let windowClass: window.Window = windowStage.getMainWindowSync();

// 获取应用主窗口

AppStorage.setOrCreate(“windowClass”,windowClass);

}

//Index文件中

import { window } from ‘@kit.ArkUI’;

import { BusinessError } from ‘@ohos.base’;

@Entry

@Component

struct Index43 {

private windowStage = AppStorage.get(“windowStage”) as window.WindowStage

private windowClass = AppStorage.get(“windowClass”) as window.Window

@State message: string = ‘Hello World’;

build() {

Row() {

Column() {

Text(‘禁止截屏’)

.fontSize(50)

.fontWeight(FontWeight.Bold)

.onClick(() => {

let isPrivacyMode: boolean = true;

try {

this.windowClass.setWindowPrivacyMode(isPrivacyMode, (err: BusinessError) => {

const errCode: number = err.code;

if (errCode) {

console.error(‘Failed to set the window to privacy mode. Cause:’ + JSON.stringify(err));

return;

}

console.info(‘Succeeded in setting the window to privacy mode.’);

});

} catch (exception) {

console.error(‘Failed to set the window to privacy mode. Cause:’ + JSON.stringify(exception));

}

})

Text(‘允许截屏’)

.fontSize(50)

.fontWeight(FontWeight.Bold)

.onClick(() => {

let isPrivacyMode: boolean = false;

try {

this.windowClass.setWindowPrivacyMode(isPrivacyMode, (err: BusinessError) => {

const errCode: number = err.code;

if (errCode) {

console.error(‘Failed to set the window to privacy mode. Cause:’ + JSON.stringify(err));

return;

}

console.info(‘Succeeded in setting the window to privacy mode.’);

});

} catch (exception) {

console.error(‘Failed to set the window to privacy mode. Cause:’ + JSON.stringify(exception));

}

})

}

.width(‘100%’)

}

.height(‘100%’)

}

}

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


HarmonyOS 鸿蒙Next 防录屏和防截屏功能主要通过系统级API和权限管理来实现。开发者可以通过以下方式实现该功能:

  1. 窗口标志设置:在Activity或窗口创建时,可以通过设置窗口标志来防止录屏和截屏。使用WindowManager.LayoutParams中的FLAG_SECURE标志,可以确保窗口内容不被屏幕录制或截屏工具捕获。

  2. 权限管理:通过检查应用是否拥有特定权限(如录屏和截屏权限),在权限未被授予时禁止相关操作。虽然鸿蒙系统不直接提供录屏和截屏的API给第三方应用,但开发者可以通过监听系统广播或查询系统设置来判断是否正在进行录屏或截屏。

  3. 媒体投影管理:对于需要更高级别的防录屏保护,开发者可以管理媒体投影(MediaProjection)的创建和使用。通过监控媒体投影的创建,可以在必要时阻止录屏行为。

  4. 自定义视图处理:在某些情况下,开发者可能需要自定义视图并覆盖其onDraw方法来防止内容被截屏。通过覆盖此方法,可以在视图绘制时添加额外的安全层。

请注意,以上方法需要开发者在开发过程中仔细测试和验证,以确保功能的完整性和安全性。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部