HarmonyOS 鸿蒙Next禁止截屏setWindowPrivacyMode无效?
HarmonyOS 鸿蒙Next禁止截屏setWindowPrivacyMode无效?
import UIAbility from '@ohos.app.ability.UIAbility';
import hilog from '@ohos.hilog';
import window from '@ohos.window';
export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
}
onDestroy() {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
}
onWindowStageCreate(windowStage: window.WindowStage) {
// Main window is created, set main page for this ability
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
// 1.获取应用主窗口。
let windowClass = null;
windowStage.getMainWindow((err, data) => {
if (err.code) {
console.error('Failed to obtain the main window. Cause: ' + JSON.stringify(err));
return;
}
windowClass = data;
console.info('Succeeded in obtaining the main window. Data: ' + JSON.stringify(data));
let isPrivacyMode = true;
try {
windowClass.setWindowPrivacyMode(isPrivacyMode, (err) => {
if (err.code) {
console.error('zsf Failed to set the window to privacy mode. Cause:' + JSON.stringify(err));
return;
}
console.info('zsf Succeeded in setting the window to privacy mode.');
});
} catch (exception) {
console.error('zsf Failed to set the window to privacy mode. Cause:' + JSON.stringify(exception));
}
// 2.设置主窗口属性。以设置"是否可触"属性为例。
let isTouchable = false;
windowClass.setWindowTouchable(isTouchable, (err) => {
if (err.code) {
console.error('Failed to set the window to be touchable. Cause:' + JSON.stringify(err));
return;
}
console.info('Succeeded in setting the window to be touchable.');
})
})
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) ?? '');
});
}
onWindowStageDestroy() {
// Main window is destroyed, release UI related resources
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
}
onForeground() {
// Ability has brought to foreground
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
}
onBackground() {
// Ability has back to background
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
}
}
设备: Mate 60 Pro
我设置了setWindowPrivacyMode(true, () => {}),LOG执行输出了 zsf Succeeded in setting the window to privacy mode. 还是可以成功截屏和录屏
没加,在module.json5里加吗?什么权限?
“name”: “ohos.permission.PRIVACY_WINDOW”
先生大义!
"name": "ohos.permission.PRIVACY_WINDOW"
加权限, 加权限后如果还是不行, 就清理编译器缓存, 都是泪"name": "ohos.permission.PRIVACY_WINDOW"
加权限, 加权限后如果还是不行, 就清理编译器缓存, 都是泪难道模拟器不生效?
请问这个是整个ability都防截屏?怎么设置某个页面防截屏呀?
我是在onPageShow开启防截屏,在onPageHide关闭一下就好了
大佬 有没有具体实现的代码 Windows的实例获取不到呀页面的
又一个倒霉蛋,不知道能不能帮上你,文档写的比较恶心,需要你再ability中定义子窗口 1. let windowClass: window.Window | undefined = windowStage.getMainWindowSync(); let config: window.Configuration = { name: “test”, windowType: window.WindowType.TYPE_DIALOG, ctx: this.context }; try { let promise = window.createWindow(config); promise.then((data) => { windowClass = data; console.info(‘Succeeded in creating the window. Data:’ + JSON.stringify(data)); }).catch((err: BusinessError) => { console.error(‘Failed to create the Window. Cause:’ + JSON.stringify(err)); }); } catch (exception) { console.error('Failed to create the window. Cause: ’ + JSON.stringify(exception)); } 2.定义个方法 /**
- 截屏或者录屏 */ static setScreenCapture(isPrivacyMode: boolean): void { let windowClass: window.Window = window.findWindow(“test”); // let windowClass: window.Window = window.getLastWindow(getContext()); // let windowClass: window.Window = (getContext() as common.UIAbilityContext).windowStage.getMainWindowSync(); let promise = windowClass.setWindowPrivacyMode(isPrivacyMode); // 设置防截屏录屏 promise.then(() => { }).catch((err: BusinessError) => { }) } 3.在需要用到的page中 onPageShow() { WindowUtil.setScreenCapture(true) UserInfoUtil.getUserInfo() }
onPageHide(): void { WindowUtil.setScreenCapture(false) //由广告页进入判断并没有切换到验证码页面 } 4.最后别忘记module.json5中添加权限 “name”: “ohos.permission.PRIVACY_WINDOW”
我的设备好使的,复制的您的代码
我是p50pro,API9,工具是3.1.1 Release
手机什么版本?
4.0.0
针对HarmonyOS 鸿蒙Next禁止截屏setWindowPrivacyMode无效的问题,作为IT专家,以下是我的专业解答:
- 权限设置:确保在应用的module.json5文件中已添加ohos.permission.PRIVACY_WINDOW权限。
- API调用:通过调用setWindowPrivacyMode原生API来设置窗口为隐私模式。该方法接受一个布尔值参数,当参数为true时,开启禁止截屏和录屏功能。
- 版本支持:确保HarmonyOS系统版本以及应用版本均支持此功能。
- 界面管理:在特定界面,获取窗口对象后调用setWindowPrivacyMode(true)来设置隐私模式,退出界面时调用setWindowPrivacyMode(false)来恢复。
如果以上步骤均正确无误,但问题依旧存在,可能是由于系统漏洞或Bug导致。此时,建议尝试更新系统版本或应用版本,并检查是否有相关的系统更新或补丁。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。