1# @ohos.arkui.uiExtension (uiExtension)(系统接口) 2 3用于EmbeddedUIExtensionAbility(或UIExtensionAbility)中获取宿主应用的窗口信息或对应的EmbeddedComponent(或UIExtensionComponent)组件的信息。 4 5> **说明** 6> 7> 从API version 12开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 8> 9> 本文仅介绍当前模块的系统接口,其他公开接口参见[@ohos.arkui.uiExtension (uiExtension)](js-apis-arkui-uiExtension.md)。 10 11## 导入模块 12 13``` 14import { uiExtension } from '@kit.ArkUI'; 15``` 16 17## WindowProxy 18 19UIExtension宿主窗代理。 20 21### hideNonSecureWindows 22 23hideNonSecureWindows(shouldHide: boolean): Promise\<void> 24 25设置是否隐藏不安全窗口,使用Promise异步回调。 26 27> **说明:** 28> 29> - 不安全窗口是指可能遮挡[EmbeddedComponent](arkui-ts/ts-container-embedded-component.md)(或[UIExtensionComponent](arkui-ts/ts-container-ui-extension-component-sys.md))组件的窗口,如全局悬浮窗、宿主子窗口和宿主创建的Dialog窗口(不包括系统应用创建的上述类型窗口)。 30> - 当EmbeddedComponent(或UIExtensionComponent)组件被用来显示敏感操作提示内容时,可以选择隐藏不安全窗口,保护敏感操作提示内容不会被遮挡。当EmbeddedComponent(或UIExtensionComponent)组件不显示或销毁时,不安全窗口会重新显示。 31> - 针对PC/2in1设备,当调用hideNonSecureWindows(true)时,不安全窗口中的全局悬浮窗不会被隐藏。 32 33**需要权限**:ohos.permission.ALLOW_SHOW_NON_SECURE_WINDOWS 34 35**系统能力**:SystemCapability.ArkUI.ArkUI.Full 36 37**系统接口**:此接口为系统接口。 38 39**参数:** 40 41| 参数名 | 类型 | 必填 | 说明 | 42| ----------- | ------------------------- | ---- | ---------- | 43| shouldHide | boolean | 是 | 指示是否隐藏不安全窗口,true表示隐藏,false表示不隐藏。 | 44 45**返回值:** 46 47| 类型 | 说明 | 48| ------------------- | ------------------------- | 49| Promise<void> | 无返回结果的Promise对象。 | 50 51**错误码:** 52 53| 错误码ID | 错误信息 | 54| -------- | --------------------------------- | 55| 202 | Permission verification failed. A non-system application calls a system API. | 56| 401 | Parameter error. Possible causes: <br> 1. Mandatory parameters are left unspecified. <br> 2. Incorrect parameters types. <br> 3. Parameter verification failed. | 57| 1300002 | Abnormal state. Possible causes: <br> 1. Permission denied. Interface caller does not have permission "ohos.permission.ALLOW_SHOW_NON_SECURE_WINDOWS". <br> 2. The UIExtension window proxy is abnormal. | 58| 1300003 | This window manager service works abnormally. | 59 60**示例** 61 62```ts 63// ExtensionProvider.ts 64 65import { UIExtensionAbility, UIExtensionContentSession, Want } from '@kit.AbilityKit'; 66import { BusinessError } from '@kit.BasicServicesKit'; 67 68export default class EntryAbility extends UIExtensionAbility { 69 onSessionCreate(want: Want, session: UIExtensionContentSession) { 70 const extensionHostWindow = session.getUIExtensionHostWindowProxy(); 71 // 隐藏非安全窗口 72 extensionHostWindow.hideNonSecureWindows(true).then(()=> { 73 console.info(`Succeeded in hiding the non-secure windows.`); 74 }).catch((err: BusinessError)=> { 75 console.error(`Failed to hide the non-secure windows. Cause:${JSON.stringify(err)}`); 76 }) 77 } 78 onSessionDestroy(session: UIExtensionContentSession) { 79 const extensionHostWindow = session.getUIExtensionHostWindowProxy(); 80 // 取消隐藏非安全窗口 81 extensionHostWindow.hideNonSecureWindows(false).then(()=> { 82 console.info(`Succeeded in showing the non-secure windows.`); 83 }).catch((err: BusinessError)=> { 84 console.error(`Failed to show the non-secure windows. Cause:${JSON.stringify(err)}`); 85 }) 86 } 87} 88``` 89 90### setWaterMarkFlag 91 92setWaterMarkFlag(enable: boolean): Promise<void> 93 94为当前窗口添加或删除安全水印标志,使用Promise异步回调。 95> **说明:** 96> 97> 添加安全水印标志后,窗口在前台时会将当前全屏幕覆盖水印。全屏、悬浮窗、分屏等场景下只要有添加了安全水印标志的窗口在前台,就会显示全屏水印。 98 99**系统能力**:SystemCapability.ArkUI.ArkUI.Full 100 101**系统接口**:此接口为系统接口。 102 103**参数:** 104 105| 参数名 | 类型 | 必填 | 说明 | 106| ------ | ------- | --- | ------------------------------------------------ | 107| enable | boolean | 是 | 是否对窗口添加标志位。true表示添加,false表示删除。 | 108 109**返回值:** 110 111| 类型 | 说明 | 112| ------------------- | ------------------------- | 113| Promise<void> | 无返回结果的Promise对象。 | 114 115**错误码:** 116 117| 错误码ID | 错误信息 | 118| ------- | ---------------------------------------------- | 119| 1300002 | The UIExtension window proxy is abnormal. | 120| 1300003 | This window manager service works abnormally. | 121| 1300008 | The display device is abnormal. | 122 123**示例** 124 125```ts 126// ExtensionProvider.ts 127import { UIExtensionAbility, UIExtensionContentSession, Want } from '@kit.AbilityKit'; 128import { BusinessError } from '@kit.BasicServicesKit'; 129 130export default class EntryAbility extends UIExtensionAbility { 131 onSessionCreate(want: Want, session: UIExtensionContentSession) { 132 const extensionHostWindow = session.getUIExtensionHostWindowProxy(); 133 // 添加安全水印标志 134 extensionHostWindow.setWaterMarkFlag(true).then(() => { 135 console.info(`Succeeded in setting water mark flag of window.`); 136 }).catch((err: BusinessError) => { 137 console.error(`Failed to setting water mark flag of window. Cause:${JSON.stringify(err)}`); 138 }) 139 } 140 onSessionDestroy(session: UIExtensionContentSession) { 141 const extensionHostWindow = session.getUIExtensionHostWindowProxy(); 142 // 删除安全水印标志 143 extensionHostWindow.setWaterMarkFlag(false).then(() => { 144 console.info(`Succeeded in deleting water mark flag of window.`); 145 }).catch((err: BusinessError) => { 146 console.error(`Failed to deleting water mark flag of window. Cause:${JSON.stringify(err)}`); 147 }) 148 } 149} 150``` 151