• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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&lt;void&gt; | 无返回结果的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&lt;void&gt;
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&lt;void&gt; | 无返回结果的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