HarmonyOS 鸿蒙Next禁止截屏setWindowPrivacyMode无效?

发布于 1周前 作者 zlyuanteng 最后一次编辑是 5天前 来自 鸿蒙OS

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

API: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/js-apis-window-0000001477981397-V2#ZH-CN_TOPIC_0000001573929313__setwindowprivacymode9

我设置了setWindowPrivacyMode(true, () => {}),LOG执行输出了 zsf Succeeded in setting the window to privacy mode. 还是可以成功截屏和录屏

15 回复
权限加了么

没加,在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

手机什么版本?

针对HarmonyOS 鸿蒙Next禁止截屏setWindowPrivacyMode无效的问题,作为IT专家,以下是我的专业解答:

  1. 权限设置:确保在应用的module.json5文件中已添加ohos.permission.PRIVACY_WINDOW权限。
  2. API调用:通过调用setWindowPrivacyMode原生API来设置窗口为隐私模式。该方法接受一个布尔值参数,当参数为true时,开启禁止截屏和录屏功能。
  3. 版本支持:确保HarmonyOS系统版本以及应用版本均支持此功能。
  4. 界面管理:在特定界面,获取窗口对象后调用setWindowPrivacyMode(true)来设置隐私模式,退出界面时调用setWindowPrivacyMode(false)来恢复。

如果以上步骤均正确无误,但问题依旧存在,可能是由于系统漏洞或Bug导致。此时,建议尝试更新系统版本或应用版本,并检查是否有相关的系统更新或补丁。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部