鸿蒙next之如何实现防截屏功能

在HarmonyOS next中实现防截屏主要有两种方式

setWindowPrivacyMode设置窗口是否为隐私模式,设置为隐私模式的窗口,窗口内容将无法被截屏或录屏。此接口可用于禁止截屏/录屏的场景。

方式一: 在onWindowStageCreate回调中设置主窗口为隐私模式,具体可参考示例代码:

js 复制代码
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 权限

js 复制代码
"requestPermissions": [
  {"name": "ohos.permission.PRIVACY_WINDOW"}
]

然后在进入页面时触发onPageShow回调,调用setWindowPrivacyMode设置窗口为隐私模式,离开页面时触发onPageHide回调,设置窗口为非隐私模式,参考示例代码如下:

js 复制代码
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%')
  }
}
相关推荐
坚果派·白晓明1 小时前
HarmonyOS NEXT端侧工程调用云侧能力实现业务功能
华为·harmonyos·项目实战·端云一体化
HarmonyOS小助手1 小时前
京东正式开源Taro on HarmonyOS C-API 版本,为鸿蒙应用跨端开发提供高性能框架
harmonyos·鸿蒙·harmonyos next·harmonyos 5.0·鸿蒙5·鸿蒙生态
白晓明3 小时前
端侧调用云存储实现头像存储
harmonyos
白晓明3 小时前
HarmonyOS NEXT端云一体化云侧云函数介绍和开发
前端·harmonyos
白晓明3 小时前
HarmonyOS NEXT端侧工程调用云函数能力实现业务功能
前端·harmonyos
六一二4 小时前
Cursor鸿蒙实战
harmonyos
脑极体4 小时前
鸿蒙星闪,智能生活交响乐的指挥家
华为·生活·harmonyos
中雨20254 小时前
HarmonyOS Next快速入门:函数和自定义构建函数
harmonyos
龙儿筝4 小时前
ArkUI-X案例解析
harmonyos
程序员小刘7 小时前
如何开发HarmonyOS 5的分布式通信功能?
分布式·华为·harmonyos 5