HarmonyOS鸿蒙Next中setWindowPrivacyMode设置成功后,不可以截图了。但app前后台切换或者锁屏在打开,可以继续截图

HarmonyOS鸿蒙Next中setWindowPrivacyMode设置成功后,不可以截图了。但app前后台切换或者锁屏在打开,可以继续截图

setWindowPrivacyMode设置成功后,不可以截图了。但app前后台切换或者锁屏在打开,可以继续截图

这是为啥,为什么窗口的私密属性丢了?

3 回复

本地无法复现你的场景,锁屏和后台都试过。

解决方案

  1. 检查module.json5文件中是否配置ohos.permission.PRIVACY_WINDOW权限。
  2. 确认设置防截屏的地方是否执行。常见的场景是放在了组件的onPageShow里,而该生命周期没被执行。
  3. 检查是否两个页面防截屏设置相互冲突。A跳转B时,在A隐藏时设置了取消防截屏。在B展示时,设置了开启防截屏。但结果A的取消防截屏操作在B开启防截屏操作之后执行。

总结

实现防截屏功能的两种方案:

  1. 方案一:设置主窗口为隐私模式,可参考如何实现防截屏功能中的方式一。

  2. 方案二:进入页面开启隐私模式,离开页面取消,具体步骤如下。

    1. 在module.json5文件中配置权限ohos.permission.PRIVACY_WINDOW,示例代码如下:

      "requestPermissions": [
        {
          "name": "ohos.permission.PRIVACY_WINDOW"
        }
      ]
      
    2. 配置WindowUtils工具类用于封装设置隐私模式的逻辑,示例代码如下:

      // WindowUtils.ets
      import window from '@ohos.window';
      import common from '@ohos.app.ability.common';
      
      export class windowUtils {
        static setWindowPrivacyModeInPage(context: common.UIAbilityContext, isFlag: boolean) {
          window.getLastWindow(context).then((lastWindow) => {
            lastWindow.setWindowPrivacyMode(isFlag);
          })
        }
      }
      
    3. 进入页面时在onPageShow()中获取当前窗口对象并设置隐私模式,退出页面时在onPageHide()生命周期中取消隐私模式即可,示例代码如下:

      // Index.ets
      import common from '@ohos.app.ability.common';
      import { windowUtils } from '../common/WindowUtils';
      
      @Entry
      @Component
      struct Index {
        @State message: string = 'Hello World';
      
        onPageShow(): void {
          windowUtils.setWindowPrivacyModeInPage(getContext(this) as common.UIAbilityContext, true);
        }
      
        onPageHide() {
          windowUtils.setWindowPrivacyModeInPage(getContext(this) as common.UIAbilityContext, false);
        }
      
        build() {
          Row() {
            Column() {
              Text(this.message)
                .fontSize(50)
                .fontWeight(FontWeight.Bold)
            }
            .width('100%')
          }
          .height('100%')
        }
      }
      

更多关于HarmonyOS鸿蒙Next中setWindowPrivacyMode设置成功后,不可以截图了。但app前后台切换或者锁屏在打开,可以继续截图的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS NEXT中,setWindowPrivacyMode(true)启用后窗口会禁止截图。当应用前后台切换或锁屏再解锁时,隐私模式可能被系统重置导致截图功能恢复。这是系统出于安全考虑的设计机制,隐私模式仅在单次会话中持续有效。要维持禁截图状态,需在每次应用恢复前台时重新调用setWindowPrivacyMode(true)

这是一个关于HarmonyOS Next中窗口隐私模式的行为特性问题。当调用setWindowPrivacyMode(true)设置隐私模式后,系统会禁止截图功能,这是预期行为。

但出现前后台切换或锁屏后隐私模式失效的情况,可能是因为:

  1. 窗口状态变化时隐私标志未被正确保持
  2. 系统在恢复窗口时未重新应用隐私设置

建议检查:

  1. 在onWindowFocusChange等生命周期回调中重新确认隐私模式状态
  2. 考虑在onResume时重新调用setWindowPrivacyMode
  3. 检查是否有其他代码修改了窗口属性

这是HarmonyOS窗口管理的一个已知行为特性,需要开发者主动维护窗口的隐私状态。

回到顶部