• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.display (屏幕属性)(系统接口)
2
3屏幕属性提供管理显示设备的一些基础能力,包括获取默认显示设备的信息,获取所有显示设备的信息以及监听显示设备的插拔行为。
4
5> **说明:**
6>
7> - 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
8>
9> - 当前页面仅包含本模块的系统接口,其他公开接口参见[@ohso.display (屏幕属性)](js-apis-display.md)。
10
11## 导入模块
12
13```ts
14import { display } from '@kit.ArkUI';
15```
16
17## display.hasPrivateWindow<sup>9+</sup>
18
19hasPrivateWindow(displayId: number): boolean
20
21查询指定display对象上是否有可见的隐私窗口。可通过[setWindowPrivacyMode()](js-apis-window.md#setwindowprivacymode9)接口设置隐私窗口。隐私窗口内容将无法被截屏或录屏。
22
23**系统接口:** 此接口为系统接口。
24
25**系统能力:** SystemCapability.WindowManager.WindowManager.Core
26
27**参数:**
28
29| 参数名 | 类型                      | 必填 | 说明       |
30| ------ | ------------------------- | ---- |----------|
31| displayId    | number                    | 是   | 显示设备的id,该参数仅支持整数输入。该参数大于等于0。 |
32
33**返回值:**
34
35| 类型                             | 说明                                                                    |
36| -------------------------------- |-----------------------------------------------------------------------|
37|boolean | 查询的display对象上是否有可见的隐私窗口。true表示此display对象上有可见的隐私窗口,false表示此display对象上没有可见的隐私窗口。 |
38
39**错误码:**
40
41以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[屏幕错误码](errorcode-display.md)。
42
43| 错误码ID | 错误信息 |
44| ------- | -------------------------------------------- |
45| 202     | Permission verification failed. A non-system application calls a system API.|
46| 401     | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.|
47| 1400003 | This display manager service works abnormally. |
48
49**示例:**
50
51```ts
52import { display } from '@kit.ArkUI';
53
54let displayClass: display.Display | null = null;
55try {
56  displayClass = display.getDefaultDisplaySync();
57
58  let ret: boolean = true;
59  try {
60    ret = display.hasPrivateWindow(displayClass.id);
61  } catch (exception) {
62    console.error('Failed to check has privateWindow or not. Code: ' + JSON.stringify(exception));
63  }
64  if (ret == undefined) {
65    console.log("Failed to check has privateWindow or not.");
66  }
67  if (ret) {
68    console.log("There has privateWindow.");
69  } else if (!ret) {
70    console.log("There has no privateWindow.");
71  }
72} catch (exception) {
73  console.error('Failed to obtain the default display object. Code: ' + JSON.stringify(exception));
74}
75```
76
77## display.on('privateModeChange')<sup>10+</sup>
78
79on(type: 'privateModeChange', callback: Callback&lt;boolean&gt;): void
80
81开启屏幕隐私模式变化的监听。当屏幕前台有隐私窗口,则屏幕处于隐私模式,屏幕中的隐私窗口内容无法被截屏或录屏。
82
83**系统接口:** 此接口为系统接口。
84
85**系统能力:** SystemCapability.WindowManager.WindowManager.Core
86
87**参数:**
88
89| 参数名   | 类型                                       | 必填 | 说明                                                    |
90| -------- |------------------------------------------| ---- | ------------------------------------------------------- |
91| type     | string                                   | 是   | 监听事件,固定为'privateModeChange',表示屏幕隐私模式状态发生变化。 |
92| callback | Callback&lt;boolean&gt; | 是   | 回调函数。表示屏幕隐私模式是否改变。true表示屏幕由非隐私窗口模式变为隐私模式,false表示屏幕由隐私模式变为非隐私模式。 |
93
94**错误码:**
95
96以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
97
98| 错误码ID | 错误信息 |
99| ------- | ----------------------- |
100| 202     | Permission verification failed. A non-system application calls a system API.|
101| 401     | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types.|
102
103**示例:**
104
105```ts
106import { Callback } from '@kit.BasicServicesKit';
107
108let callback: Callback<boolean> = (data: boolean) => {
109  console.info('Listening enabled. Data: ' + JSON.stringify(data));
110};
111try {
112  display.on("privateModeChange", callback);
113} catch (exception) {
114  console.error('Failed to register callback. Code: ' + JSON.stringify(exception));
115}
116```
117
118## display.off('privateModeChange')<sup>10+</sup>
119
120off(type: 'privateModeChange', callback?: Callback&lt;boolean&gt;): void
121
122关闭屏幕隐私模式变化的监听。当屏幕前台有隐私窗口,则屏幕处于隐私模式,屏幕中的隐私窗口内容无法被截屏或录屏。
123
124**系统接口:** 此接口为系统接口。
125
126**系统能力:** SystemCapability.WindowManager.WindowManager.Core
127
128**参数:**
129
130| 参数名   | 类型                                       | 必填 | 说明                                                    |
131| -------- |------------------------------------------| ---- | ------------------------------------------------------- |
132| type     | string                                   | 是   | 监听事件,固定为'privateModeChange',表示屏幕隐私模式状态发生变化。 |
133| callback | Callback&lt;boolean&gt; | 否   | 需要取消注册的回调函数。表示屏幕隐私模式是否改变。true表示屏幕由非隐私窗口模式变为隐私模式,false表示屏幕由隐私模式变为非隐私模式。若无此参数,则取消注册屏幕隐私模式变化监听的所有回调函数。|
134
135**错误码:**
136
137以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
138
139| 错误码ID | 错误信息 |
140| ------- | ----------------------- |
141| 202     | Permission verification failed. A non-system application calls a system API.|
142| 401     | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types.|
143
144**示例:**
145
146```ts
147try {
148  display.off("privateModeChange");
149} catch (exception) {
150  console.error('Failed to unregister callback. Code: ' + JSON.stringify(exception));
151}
152```
153
154## display.setFoldDisplayMode<sup>10+</sup>
155setFoldDisplayMode(mode: FoldDisplayMode): void
156
157更改可折叠设备的显示模式。
158
159**系统接口:** 此接口为系统接口。
160
161**系统能力:** SystemCapability.Window.SessionManager
162
163**参数:**
164
165| 参数名   | 类型                                       | 必填 | 说明                                                    |
166| -------- |------------------------------------------| ---- | ------------------------------------------------------- |
167| mode     | [FoldDisplayMode](js-apis-display.md#folddisplaymode10)    | 是   | 可折叠设备的显示模式。 |
168
169**错误码:**
170
171以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[屏幕错误码](errorcode-display.md)。
172
173| 错误码ID | 错误信息 |
174| ------- | ----------------------- |
175| 202     | Permission verification failed. A non-system application calls a system API.|
176| 401     | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types.|
177| 1400003 | This display manager service works abnormally. |
178
179**示例:**
180
181```ts
182import { display } from '@kit.ArkUI';
183
184try {
185  let mode: display.FoldDisplayMode = display.FoldDisplayMode.FOLD_DISPLAY_MODE_FULL;
186  display.setFoldDisplayMode(mode);
187} catch (exception) {
188  console.error('Failed to change the fold display mode. Code: ' + JSON.stringify(exception));
189}
190```
191
192## display.setFoldStatusLocked<sup>11+</sup>
193setFoldStatusLocked(locked: boolean): void
194
195设置可折叠设备当前折叠状态的锁定状态。
196
197**系统接口:** 此接口为系统接口。
198
199**系统能力:** SystemCapability.Window.SessionManager
200
201**参数:**
202
203| 参数名   | 类型                                       | 必填 | 说明                                                    |
204| -------- |------------------------------------------| ---- | ------------------------------------------------------- |
205| locked     | boolean    | 是   | 可折叠设备的折叠状态是否锁定。true表示锁定,false表示不锁定。 |
206
207**错误码:**
208
209以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[屏幕错误码](errorcode-display.md)。
210
211| 错误码ID | 错误信息 |
212| ------- | ----------------------- |
213| 202     | Permission verification failed. A non-system application calls a system API.|
214| 401     | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types.|
215| 1400003 | This display manager service works abnormally. |
216
217**示例:**
218
219```ts
220import { display } from '@kit.ArkUI';
221
222try {
223  let locked: boolean = false;
224  display.setFoldStatusLocked(locked);
225} catch (exception) {
226  console.error('Failed to change the fold status locked mode. Code: ' + JSON.stringify(exception));
227}
228```
229
230## display.addVirtualScreenBlocklist<sup>18+</sup>
231addVirtualScreenBlocklist(windowIds: Array\<number>): Promise\<void>
232
233将窗口添加到禁止投屏显示的名单中,被添加的窗口无法在投屏时显示。仅对应用主窗或系统窗口生效。使用Promise异步回调。
234
235**系统接口:** 此接口为系统接口。
236
237**系统能力:** SystemCapability.Window.SessionManager
238
239**参数:**
240
241| 参数名   | 类型                                       | 必填 | 说明                                                    |
242| -------- |------------------------------------------| ---- | ------------------------------------------------------- |
243| windowIds     | Array\<number>    | 是   | 窗口id列表,传入子窗窗口id时不生效。窗口id为大于0的整数。推荐使用[getWindowProperties()](js-apis-window.md#getwindowproperties9)方法获取窗口id属性。|
244
245**返回值:**
246
247| 类型 | 说明 |
248| ------------------- | ------------------------ |
249| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
250
251**错误码:**
252
253以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[屏幕错误码](errorcode-display.md)。
254
255| 错误码ID | 错误信息 |
256| ------- | ----------------------- |
257| 202     | Permission verification failed. A non-system application calls a system API.|
258| 401     | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.|
259| 801     | Capability not supported.Function addVirtualScreenBlocklist can not work correctly due to limited device capabilities. |
260| 1400003 | This display manager service works abnormally. |
261
262**示例:**
263
264```ts
265import { BusinessError } from '@kit.BasicServicesKit';
266import { display, window } from '@kit.ArkUI';
267
268export default class EntryAbility extends UIAbility {
269  // ...
270  onWindowStageCreate(windowStage: window.WindowStage) {
271    // ...
272    let windowId = windowStage.getMainWindowSync().getWindowProperties().id;
273    let windowIds = [windowId];
274
275    let promise = display.addVirtualScreenBlocklist(windowIds);
276    promise.then(() => {
277      console.info('Succeeded in adding virtual screen blocklist.');
278    }).catch((err: BusinessError) => {
279      console.error('Failed to add virtual screen blocklist. Code: ' + JSON.stringify(err));
280    })
281  }
282}
283```
284
285## display.removeVirtualScreenBlocklist<sup>18+</sup>
286removeVirtualScreenBlocklist(windowIds: Array\<number>): Promise\<void>
287
288将窗口从禁止投屏显示的名单中移除,被移除的窗口可以在投屏时显示。仅对应用主窗或系统窗口生效。使用Promise异步回调。
289
290**系统接口:** 此接口为系统接口。
291
292**系统能力:** SystemCapability.Window.SessionManager
293
294**参数:**
295
296| 参数名   | 类型                                       | 必填 | 说明                                                    |
297| -------- |------------------------------------------| ---- | ------------------------------------------------------- |
298| windowIds     | Array\<number>    | 是   | 窗口id列表,传入子窗窗口id时不生效。窗口id为大于0的整数。推荐使用[getWindowProperties()](js-apis-window.md#getwindowproperties9)方法获取窗口id属性。|
299
300**返回值:**
301
302| 类型 | 说明 |
303| ------------------- | ------------------------ |
304| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
305
306**错误码:**
307
308以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[屏幕错误码](errorcode-display.md)。
309
310| 错误码ID | 错误信息 |
311| ------- | ----------------------- |
312| 202     | Permission verification failed. A non-system application calls a system API.|
313| 401     | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed.|
314| 801     | Capability not supported.Function removeVirtualScreenBlocklist can not work correctly due to limited device capabilities. |
315| 1400003 | This display manager service works abnormally. |
316
317**示例:**
318
319```ts
320import { BusinessError } from '@kit.BasicServicesKit';
321import { display, window } from '@kit.ArkUI';
322
323export default class EntryAbility extends UIAbility {
324  // ...
325  onWindowStageCreate(windowStage: window.WindowStage) {
326    // ...
327    let windowId = windowStage.getMainWindowSync().getWindowProperties().id;
328    let windowIds = [windowId];
329
330    let promise = display.addVirtualScreenBlocklist(windowIds);
331    promise.then(() => {
332      console.info('Succeeded in adding virtual screen blocklist.');
333    }).catch((err: BusinessError) => {
334      console.error('Failed to add virtual screen blocklist. Code: ' + JSON.stringify(err));
335    })
336
337    promise = display.removeVirtualScreenBlocklist(windowIds);
338    promise.then(() => {
339      console.info('Succeeded in removing virtual screen blocklist.');
340    }).catch((err: BusinessError) => {
341      console.error('Failed to remove virtual screen blocklist. Code: ' + JSON.stringify(err));
342    })
343  }
344}
345```
346
347## Display
348屏幕实例。描述display对象的属性和方法。
349
350下列API示例中都需先使用[getAllDisplays()](js-apis-display.md#displaygetalldisplays9)、[getDefaultDisplaySync()](js-apis-display.md#displaygetdefaultdisplaysync9)中的任一方法获取到Display实例,再通过此实例调用对应方法。
351
352### hasImmersiveWindow<sup>11+</sup>
353hasImmersiveWindow(callback: AsyncCallback&lt;boolean&gt;): void
354
355判断当前屏幕是否包含沉浸式窗口,使用callback异步回调。
356
357**系统接口:** 此接口为系统接口。
358
359**系统能力:** SystemCapability.Window.SessionManager
360
361**参数:**
362
363| 参数名      | 类型                        | 必填 | 说明                                                         |
364| ----------- | --------------------------- | ---- | ------------------------------------------------------------ |
365| callback    | AsyncCallback&lt;boolean&gt;   | 是   | 回调函数。返回true表示当前屏幕包含沉浸式窗口,false表示不包含。 |
366
367**错误码:**
368
369以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[屏幕错误码](errorcode-display.md)。
370
371| 错误码ID | 错误信息 |
372| ------- | ----------------------- |
373| 202     | Permission verification failed. A non-system application calls a system API.|
374| 801 | Capability not supported on this device. |
375| 1400001 | Invalid display or screen. |
376| 1400003 | This display manager service works abnormally. |
377
378**示例:**
379
380```ts
381import { BusinessError } from '@kit.BasicServicesKit';
382import { display } from '@kit.ArkUI';
383
384let displayClass: display.Display | null = null;
385displayClass = display.getDefaultDisplaySync();
386displayClass.hasImmersiveWindow((err: BusinessError, data) => {
387    const errCode: number = err.code;
388    if (errCode) {
389      console.error('Failed to check whether there is immersive window. Code: ' + JSON.stringify(err));
390      return;
391    }
392    console.info('Succeeded in checking whether there is immersive window. data: ' + JSON.stringify(data));
393});
394```
395### hasImmersiveWindow<sup>11+</sup>
396hasImmersiveWindow(): Promise&lt;boolean&gt;
397
398判断当前屏幕是否包含沉浸式窗口,使用Promise异步回调。
399
400**系统接口:** 此接口为系统接口。
401
402**系统能力:** SystemCapability.Window.SessionManager
403
404**返回值:**
405
406| 类型                | 说明                      |
407| ------------------- | ------------------------- |
408| Promise&lt;boolean&gt; | Promise对象。返回true表示当前屏幕包含沉浸式窗口,false表示不包含。 |
409
410**错误码:**
411
412以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[屏幕错误码](errorcode-display.md)。
413
414| 错误码ID | 错误信息 |
415| ------- | ----------------------- |
416| 202     | Permission verification failed. A non-system application calls a system API.|
417| 801 | Capability not supported on this device. |
418| 1400001 | Invalid display or screen. |
419| 1400003 | This display manager service works abnormally. |
420
421**示例:**
422
423```ts
424import { BusinessError } from '@kit.BasicServicesKit';
425import { display } from '@kit.ArkUI';
426
427let displayClass: display.Display | null = null;
428displayClass = display.getDefaultDisplaySync();
429let promise = displayClass.hasImmersiveWindow();
430promise.then((data) => {
431  console.info('Succeeded in checking whether there is immersive window. data: ' + JSON.stringify(data));
432}).catch((err: BusinessError) => {
433  console.error('Failed to check whether there is immersive window. Code: ' + JSON.stringify(err));
434})
435```
436