如何实现防截屏功能
2024-12-18 15:41:33
126次阅读
0个评论
setWindowPrivacyMode设置窗口是否为隐私模式,设置为隐私模式的窗口,窗口内容将无法被截屏或录屏。此接口可用于禁止截屏/录屏的场景。
方式一:在onWindowStageCreate回调中设置主窗口为隐私模式,具体可参考示例代码:
import { window } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';
onWindowStageCreate(windowStage: window.WindowStage): void {
// Main window is created, set main page for this ability
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
// 获取主窗口
windowStage.getMainWindow((err: BusinessError, data) => {
let errCode: number = err.code;
if (errCode) {
console.error('Failed to obtain the main window. Cause: ' + JSON.stringify(err));
return;
}
let windowClass: window.Window = data;
console.info('Succeeded in obtaining the main window. Data: ' + JSON.stringify(data));
// 设置窗口隐私模式
let isPrivacyMode: boolean = true;
try {
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));
}
})
windowStage.loadContent('pages/Index', (err, data) => {
if (err.code) {
hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
return;
}
hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');
});
}
方式二:进入页面开启隐式模式,离开页面取消,具体可参考以下步骤:
首先在module.json5文件中声明需要使用的ohos.permission.PRIVACY_WINDOW 权限
"requestPermissions": [
{"name": "ohos.permission.PRIVACY_WINDOW"}
]
然后在进入页面时触发onPageShow回调,调用setWindowPrivacyMode设置窗口为隐私模式,离开页面时触发onPageHide回调,设置窗口为非隐私模式,参考示例代码如下:
import { BusinessError } from '@kit.BasicServicesKit';
import { common } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
class windowUtils {
static setWindowPrivacyModeInPage(context: common.UIAbilityContext, isFlag: boolean) {
window.getLastWindow(context).then((lastWindow) => {
lastWindow.setWindowPrivacyMode(isFlag, (err: BusinessError) => {
const errCode: number = err.code;
if (errCode) {
console.error('Failed to set the window to privacy mode. 1Cause:' + JSON.stringify(err));
return;
}
console.info('Succeeded in setting the window to privacy mode.');
});
})
}
}
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
onPageShow() {
windowUtils.setWindowPrivacyModeInPage(getContext(this) as common.UIAbilityContext, true);
}
onPageHide() {
windowUtils.setWindowPrivacyModeInPage(getContext(this) as common.UIAbilityContext, false);
}
build() {
RelativeContainer() {
Text(this.message)
.id('HelloWorld')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
}
.height('100%')
.width('100%')
}
}
00
- 1回答
- 0粉丝
- 0关注
相关话题
- OpenHarmony 如何实现防截屏功能
- OpenHarmony: 如何实现跨模块的页面跳转功能
- 如何实现折叠屏折叠态不适配旋转,展示态适配旋转
- 【HarmonyOS NEXT】实现页面水印功能
- 如何完成挖孔屏的适配
- 如何获取设备屏幕横竖屏状态
- 【HarmonyOS NEXT】 Audio 实现录音及播放功能
- HarmonyOS ArkTS中视频播放Video组件实现竖屏到横屏切换
- 如何锁定设备竖屏,使得窗口不随屏幕旋转
- 鸿蒙next boss直聘招聘app 聊天功能实现来
- 如何实现跨文件组件复用
- List控件加载的数据如何判断是否超过一屏
- 如何实现应用的屏幕自动旋转
- 如何实现上下切换的页面间跳转动画
- 「Mac畅玩鸿蒙与硬件26」UI互动应用篇3 - 倒计时和提醒功能实现