js-apis-display.md 18.1 KB
Newer Older
1
# 屏幕属性
2
屏幕属性提供管理显示设备的一些基础能力,包括获取默认显示设备的信息,获取所有显示设备的信息以及监听显示设备的插拔行为。
Z
zengyawen 已提交
3

G
ge-yafang 已提交
4
> **说明:**
5
>
6
> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
Z
zengyawen 已提交
7 8

## 导入模块
Z
zengyawen 已提交
9

10
```js
Z
zengyawen 已提交
11 12 13
import display from '@ohos.display';
```

X
xpeng 已提交
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
## DisplayState

显示设备的状态枚举。

**系统能力:** SystemCapability.WindowManager.WindowManager.Core

| 名称 | 值 | 说明 |
| -------- | -------- | -------- |
| STATE_UNKNOWN | 0 | 表示显示设备状态未知。|
| STATE_OFF | 1 | 表示显示设备状态为关闭。 |
| STATE_ON | 2 | 表示显示设备状态为开启。|
| STATE_DOZE | 3 | 表示显示设备为低电耗模式。|
| STATE_DOZE_SUSPEND | 4 | 表示显示设备为睡眠模式,CPU为挂起状态。 |
| STATE_VR | 5 | 表示显示设备为VR模式。|
| STATE_ON_SUSPEND | 6 | 表示显示设备为开启状态,CPU为挂起状态。 |

## Rect<sup>9+</sup>

矩形区域。

**系统能力:** SystemCapability.WindowManager.WindowManager.Core

36
| 名称   | 类型 | 可读 | 可写 | 说明               |
X
xpeng 已提交
37 38 39 40 41 42 43 44 45 46 47 48
| ------ | -------- | ---- | ---- | ------------------ |
| left   | number   | 是   | 是   | 矩形区域的左边界。 |
| top    | number   | 是   | 是   | 矩形区域的上边界。 |
| width  | number   | 是   | 是   | 矩形区域的宽度。   |
| height | number   | 是   | 是   | 矩形区域的高度。   |

## WaterfallDisplayAreaRects<sup>9+</sup>

瀑布屏曲面部分显示区域。

**系统能力:** SystemCapability.WindowManager.WindowManager.Core

49
| 名称   | 类型      | 可读 | 可写 | 说明               |
X
xpeng 已提交
50 51 52 53 54 55 56 57 58 59 60 61
| ------ | ------------- | ---- | ---- | ------------------ |
| left   | [Rect](#rect9) | 是   | 否   | 瀑布曲面区域的左侧矩形区域。 |
| top    | [Rect](#rect9) | 是   | 否   | 瀑布曲面区域的顶部矩形区域。 |
| right  | [Rect](#rect9) | 是   | 否   | 瀑布曲面区域的右侧矩形区域。 |
| bottom | [Rect](#rect9) | 是   | 否   | 瀑布曲面区域的底部矩形区域。 |

## CutoutInfo<sup>9+</sup>

挖孔屏、刘海屏、瀑布屏等不可用屏幕区域信息。

**系统能力:** SystemCapability.WindowManager.WindowManager.Core

62
| 名称                        | 类型      | 可读 | 可写 | 说明               |
X
xpeng 已提交
63
| --------------------------- | ------------- | ---- | ---- | ------------------ |
64
| boundingRects                | Array\<[Rect](#rect9)> | 是   | 否   | 挖孔、刘海等区域的边界矩形。 |
X
xpeng 已提交
65 66
| waterfallDisplayAreaRects   | [WaterfallDisplayAreaRects](#waterfalldisplayarearects9) | 是 | 否 | 瀑布屏曲面部分显示区域。 |

张必荣 已提交
67 68 69 70 71 72 73 74 75 76 77 78 79 80
## display.getDefaultDisplaySync<sup>9+</sup>

getDefaultDisplaySync(): Display

获取当前默认的display对象。

**系统能力:** SystemCapability.WindowManager.WindowManager.Core

**返回值:**

| 类型                           | 说明                                           |
| ------------------------------| ----------------------------------------------|
| [Display](#display) | 返回默认的display对象。 |

Z
zhengjiangliang 已提交
81 82 83 84 85 86
**错误码:**

以下错误码的详细介绍请参见[屏幕错误码](../errorcodes/errorcode-display.md)

| 错误码ID | 错误信息 |
| ------- | ----------------------- |
87
| 1400001 | Invalid display or screen. |
Z
zhengjiangliang 已提交
88

张必荣 已提交
89 90 91
**示例:**

```js
92
let displayClass = null;
93
try {
94
    displayClass = display.getDefaultDisplaySync();
95 96
} catch (exception) {
    console.error('Failed to obtain the default display object. Code: ' + JSON.stringify(exception));
Z
zhengjiangliang 已提交
97
}
张必荣 已提交
98 99
```

100
## display.getAllDisplays<sup>9+</sup>
101

102
getAllDisplays(callback: AsyncCallback&lt;Array&lt;Display&gt;&gt;): void
103

张必荣 已提交
104
获取当前所有的display对象,使用callback异步回调。
105

G
ge-yafang 已提交
106
**系统能力:** SystemCapability.WindowManager.WindowManager.Core
107

G
ge-yafang 已提交
108
**参数:**
109

110
| 参数名 | 类型 | 必填 | 说明 |
L
leafly2021 已提交
111
| -------- | ---------------------------------------------------- | ---- | ------------------------------- |
112
| callback | AsyncCallback&lt;Array&lt;[Display](#display)&gt;&gt; | 是 | 回调函数。返回当前所有的display对象。 |
113

Z
zhengjiangliang 已提交
114 115 116 117 118 119
**错误码:**

以下错误码的详细介绍请参见[屏幕错误码](../errorcodes/errorcode-display.md)

| 错误码ID | 错误信息 |
| ------- | ----------------------- |
120
| 1400001 | Invalid display or screen. |
Z
zhengjiangliang 已提交
121

G
ge-yafang 已提交
122
**示例:**
123

124
```js
Z
zhengjiangliang 已提交
125
let displayClass = null;
126
display.getAllDisplays((err, data) => {
Z
zhengjiangliang 已提交
127
    displayClass = data;
128 129 130 131 132 133 134
    if (err.code) {
        console.error('Failed to obtain all the display objects. Code: ' + JSON.stringify(err));
        return;
    }
    console.info('Succeeded in obtaining all the display objects. Data: ' + JSON.stringify(data));
});
```
Z
zengyawen 已提交
135

136
## display.getAllDisplays<sup>9+</sup>
137

138
getAllDisplays(): Promise&lt;Array&lt;Display&gt;&gt;
139

张必荣 已提交
140
获取当前所有的display对象,使用Promise异步回调。
141

G
ge-yafang 已提交
142
**系统能力:** SystemCapability.WindowManager.WindowManager.Core
143

G
ge-yafang 已提交
144
**返回值:**
145

146
| 类型 | 说明 |
L
leafly2021 已提交
147 148
| ----------------------------------------------- | ------------------------------------------------------- |
| Promise&lt;Array&lt;[Display](#display)&gt;&gt; | Promise对象。返回当前所有的display对象。 |
149

Z
zhengjiangliang 已提交
150 151 152 153 154 155
**错误码:**

以下错误码的详细介绍请参见[屏幕错误码](../errorcodes/errorcode-display.md)

| 错误码ID | 错误信息 |
| ------- | ----------------------- |
156
| 1400001 | Invalid display or screen. |
Z
zhengjiangliang 已提交
157

G
ge-yafang 已提交
158
**示例:**
159

160
```js
Z
zhengjiangliang 已提交
161
let displayClass = null;
162
let promise = display.getAllDisplays();
163
promise.then((data) => {
Z
zhengjiangliang 已提交
164
    displayClass = data;
165
    console.info('Succeeded in obtaining all the display objects. Data: ' + JSON.stringify(data));
166 167
}).catch((err) => {
    console.error('Failed to obtain all the display objects. Code: ' + JSON.stringify(err));
168 169
});
```
170

171 172 173 174
## display.hasPrivateWindow<sup>9+</sup>

hasPrivateWindow(displayId: number): boolean

Z
zhengjiangliang 已提交
175
查询指定display对象上是否有可见的隐私窗口。可通过[setWindowPrivacyMode()](js-apis-window.md#setwindowprivacymode9)接口设置隐私窗口。隐私窗口内容将无法被截屏或录屏。
176

177
**系统接口:** 此接口为系统接口。
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192

**系统能力:** SystemCapability.WindowManager.WindowManager.Core

**参数:**

| 参数名 | 类型                      | 必填 | 说明       |
| ------ | ------------------------- | ---- |----------|
| id     | number                    | 是   | 显示设备的id。 |

**返回值:**

| 类型                             | 说明                                                                    |
| -------------------------------- |-----------------------------------------------------------------------|
|boolean | 查询的display对象上是否有可见的隐私窗口。<br>true表示此display对象上有可见的隐私窗口,false表示此display对象上没有可见的隐私窗口。</br> |

Z
zhengjiangliang 已提交
193 194 195 196 197 198
**错误码:**

以下错误码的详细介绍请参见[屏幕错误码](../errorcodes/errorcode-display.md)

| 错误码ID | 错误信息 |
| ------- | -------------------------------------------- |
199
| 1400003 | This display manager service works abnormally. |
Z
zhengjiangliang 已提交
200

201 202
**示例:**

203
```js
204 205 206
let displayClass = null;
try {
    displayClass = display.getDefaultDisplaySync();
207

Z
zhengjiangliang 已提交
208 209 210 211 212 213 214 215 216 217 218 219 220 221
    let ret = undefined;
    try {
        ret = display.hasPrivateWindow(displayClass.id);
    } catch (exception) {
        console.error('Failed to check has privateWindow or not. Code: ' + JSON.stringify(exception));
    }
    if (ret == undefined) {
        console.log("Failed to check has privateWindow or not.");
    }
    if (ret) {
        console.log("There has privateWindow.");
    } else if (!ret) {
        console.log("There has no privateWindow.");
    }
222
} catch (exception) {
Z
zhengjiangliang 已提交
223
    console.error('Failed to obtain the default display object. Code: ' + JSON.stringify(exception));
224 225
}
```
226

Z
zengyawen 已提交
227 228
## display.on('add'|'remove'|'change')

Y
youqijing 已提交
229
on(type: 'add'|'remove'|'change', callback: Callback&lt;number&gt;): void
Z
zengyawen 已提交
230

张必荣 已提交
231
开启显示设备变化的监听。
Z
zengyawen 已提交
232

G
ge-yafang 已提交
233
**系统能力:** SystemCapability.WindowManager.WindowManager.Core
234

G
ge-yafang 已提交
235
**参数:**
236

张必荣 已提交
237 238
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
239
| type | string | 是 | 监听事件。<br/>- type为"add",表示增加显示设备事件。例如:插入显示器。<br/>- type为"remove",表示移除显示设备事件。例如:移除显示器。<br/>- type为"change",表示改变显示设备事件。例如:显示器方向改变。 |
张必荣 已提交
240
| callback | Callback&lt;number&gt; | 是 | 回调函数。返回监听到的显示设备的id。 |
Z
zengyawen 已提交
241

G
ge-yafang 已提交
242
**示例:**
Z
zengyawen 已提交
243

244
```js
245
let callback = (data) => {
246
    console.info('Listening enabled. Data: ' + JSON.stringify(data));
247
};
248 249 250 251
try {
    display.on("add", callback);
} catch (exception) {
    console.error('Failed to register callback. Code: ' + JSON.stringify(exception));
Z
zhengjiangliang 已提交
252
}
253
```
Z
zengyawen 已提交
254

Z
zengyawen 已提交
255
## display.off('add'|'remove'|'change')
Z
zengyawen 已提交
256

Y
youqijing 已提交
257
off(type: 'add'|'remove'|'change', callback?: Callback&lt;number&gt;): void
Z
zengyawen 已提交
258

张必荣 已提交
259
关闭显示设备变化的监听。
Z
zengyawen 已提交
260

G
ge-yafang 已提交
261
**系统能力:** SystemCapability.WindowManager.WindowManager.Core
262

G
ge-yafang 已提交
263
**参数:**
264

L
leafly2021 已提交
265 266 267 268
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| type | string | 是 | 监听事件。<br/>- type为"add",表示增加显示设备事件。例如:PC上插入显示器。<br/>- type为"remove",表示移除显示设备事件。例如:PC上移除显示器。<br/>- type为"change",表示改变显示设备事件。例如:显示器方向改变。 |
| callback | Callback&lt;number&gt; | 否 | 回调函数。返回监听到的显示设备的id。 |
Z
zengyawen 已提交
269

G
ge-yafang 已提交
270
**示例:**
271

272
```js
273 274 275 276
try {
    display.off("remove");
} catch (exception) {
    console.error('Failed to unregister callback. Code: ' + JSON.stringify(exception));
Z
zhengjiangliang 已提交
277
}
278 279 280 281 282 283 284 285 286
```

## display.getDefaultDisplay<sup>(deprecated)</sup>

getDefaultDisplay(callback: AsyncCallback&lt;Display&gt;): void

获取当前默认的display对象,使用callback异步回调。

> **说明:**
Z
zhengjiangliang 已提交
287
> 
288 289 290 291 292 293 294 295 296 297 298 299 300
> 从 API version 7开始支持,从API version 9开始废弃,推荐使用[getDefaultDisplaySync()](#displaygetdefaultdisplaysync9)。

**系统能力:** SystemCapability.WindowManager.WindowManager.Core

**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| callback | AsyncCallback&lt;[Display](#display)&gt; | 是 | 回调函数。返回当前默认的display对象。 |

**示例:**

```js
Z
zhengjiangliang 已提交
301
let displayClass = null;
302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318
display.getDefaultDisplay((err, data) => {
    if (err.code) {
        console.error('Failed to obtain the default display object. Code:  ' + JSON.stringify(err));
        return;
    }
    console.info('Succeeded in obtaining the default display object. Data:' + JSON.stringify(data));
    displayClass = data;
});
```

## display.getDefaultDisplay<sup>(deprecated)</sup>

getDefaultDisplay(): Promise&lt;Display&gt;

获取当前默认的display对象,使用Promise异步回调。

> **说明:**
Z
zhengjiangliang 已提交
319
> 
320 321 322 323 324 325 326 327 328 329 330 331 332
> 从 API version 7开始支持,从API version 9开始废弃,推荐使用[getDefaultDisplaySync()](#displaygetdefaultdisplaysync9)。

**系统能力:** SystemCapability.WindowManager.WindowManager.Core

**返回值:**

| 类型                               | 说明                                           |
| ---------------------------------- | ---------------------------------------------- |
| Promise&lt;[Display](#display)&gt; | Promise对象。返回当前默认的display对象。 |

**示例:**

```js
Z
zhengjiangliang 已提交
333
let displayClass = null;
334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349
let promise = display.getDefaultDisplay();
promise.then((data) => {
    displayClass = data;
    console.info('Succeeded in obtaining the default display object. Data:' + JSON.stringify(data));
}).catch((err) => {
    console.error('Failed to obtain the default display object. Code:  ' + JSON.stringify(err));
});
```

## display.getAllDisplay<sup>(deprecated)</sup>

getAllDisplay(callback: AsyncCallback&lt;Array&lt;Display&gt;&gt;): void

获取当前所有的display对象,使用callback异步回调。

> **说明:**
Z
zhengjiangliang 已提交
350
> 
351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379
> 从 API version 7开始支持,从API version 9开始废弃,推荐使用[getAllDisplays()](#displaygetalldisplays9)。

**系统能力:** SystemCapability.WindowManager.WindowManager.Core

**参数:**

| 参数名   | 类型                                                 | 必填 | 说明                            |
| -------- | ---------------------------------------------------- | ---- | ------------------------------- |
| callback | AsyncCallback&lt;Array&lt;[Display](#display)&gt;&gt; | 是   | 回调函数。返回当前所有的display对象。 |

**示例:**

```js
display.getAllDisplay((err, data) => {
    if (err.code) {
        console.error('Failed to obtain all the display objects. Code: ' + JSON.stringify(err));
        return;
    }
    console.info('Succeeded in obtaining all the display objects. Data: ' + JSON.stringify(data));
});
```

## display.getAllDisplay<sup>(deprecated)</sup>

getAllDisplay(): Promise&lt;Array&lt;Display&gt;&gt;

获取当前所有的display对象,使用Promise异步回调。

> **说明:**
Z
zhengjiangliang 已提交
380
> 
381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399
> 从 API version 7开始支持,从API version 9开始废弃,推荐使用[getAllDisplays()](#displaygetalldisplays9-1)。

**系统能力:** SystemCapability.WindowManager.WindowManager.Core

**返回值:**

| 类型                                            | 说明                                                    |
| ----------------------------------------------- | ------------------------------------------------------- |
| Promise&lt;Array&lt;[Display](#display)&gt;&gt; | Promise对象。返回当前所有的display对象。 |

**示例:**

```js
let promise = display.getAllDisplay();
promise.then((data) => {
    console.info('Succeeded in obtaining all the display objects. Data: ' + JSON.stringify(data));
}).catch((err) => {
    console.error('Failed to obtain all the display objects. Code: ' + JSON.stringify(err));
});
400
```
X
xpeng 已提交
401 402 403 404

## Display
屏幕实例。描述display对象的属性和方法。

Z
zhengjiangliang 已提交
405
下列API示例中都需先使用[getAllDisplays()](#displaygetalldisplays9)[getDefaultDisplaySync()](#displaygetdefaultdisplaysync9)中的任一方法获取到Display实例,再通过此实例调用对应方法。
X
xpeng 已提交
406 407 408

**系统能力:** SystemCapability.WindowManager.WindowManager.Core

409
| 名称 | 类型 | 可读 | 可写 | 说明 |
X
xpeng 已提交
410 411 412 413 414 415
| -------- | -------- | -------- | -------- | -------- |
| id | number | 是 | 否 | 显示设备的id号。|
| name | string | 是 | 否 | 显示设备的名称。|
| alive | boolean | 是 | 否 | 显示设备是否启用。|
| state | [DisplayState](#displaystate) | 是 | 否 | 显示设备的状态。|
| refreshRate | number | 是 | 否 | 显示设备的刷新率。|
X
xiahaiqin 已提交
416
| rotation | number | 是 | 否 | 显示设备的屏幕旋转角度。<br>值为0时,表示显示设备屏幕旋转为0°;<br>值为1时,表示显示设备屏幕旋转为90°;<br>值为2时,表示显示设备屏幕旋转为180°;<br>值为3时,表示显示设备屏幕旋转为270°。|
X
xpeng 已提交
417 418 419 420 421 422 423 424 425
| width | number | 是 | 否 | 显示设备的宽度,单位为像素。|
| height | number | 是 | 否 | 显示设备的高度,单位为像素。|
| densityDPI | number | 是 | 否 | 显示设备的屏幕密度,单位为DPI。|
| densityPixels | number | 是 | 否 | 显示设备的屏幕密度,单位为像素。|
| scaledDensity | number | 是 | 否 | 显示设备的显示字体的缩放因子。|
| xDPI | number | 是 | 否 | x方向中每英寸屏幕的确切物理像素值。 |
| yDPI | number | 是 | 否 | y方向中每英寸屏幕的确切物理像素值。|

### getCutoutInfo<sup>9+</sup>
X
xpeng 已提交
426
getCutoutInfo(callback: AsyncCallback&lt;CutoutInfo&gt;): void
X
xpeng 已提交
427

L
leafly2021 已提交
428
获取挖孔屏、刘海屏、瀑布屏等不可用屏幕区域信息。使用callback异步回调。建议应用布局规避该区域。
X
xpeng 已提交
429 430 431

**系统能力:** SystemCapability.WindowManager.WindowManager.Core

432 433
**参数:**

X
xpeng 已提交
434 435
| 参数名      | 类型                        | 必填 | 说明                                                         |
| ----------- | --------------------------- | ---- | ------------------------------------------------------------ |
X
xpeng 已提交
436
| callback    | AsyncCallback&lt;[CutoutInfo](#cutoutinfo9)&gt;   | 是   | 回调函数。当获取信息成功,err为undefined,data为获取到的CutoutInfo对象;否则err为错误对象。 |
X
xpeng 已提交
437

Z
zhengjiangliang 已提交
438 439 440 441 442 443
**错误码:**

以下错误码的详细介绍请参见[屏幕错误码](../errorcodes/errorcode-display.md)

| 错误码ID | 错误信息 |
| ------- | ----------------------- |
444
| 1400001 | Invalid display or screen. |
Z
zhengjiangliang 已提交
445

X
xpeng 已提交
446
**示例:**
447

X
xpeng 已提交
448
```js
449
let displayClass = null;
Z
zhengjiangliang 已提交
450
try {
451
    displayClass = display.getDefaultDisplaySync();
Z
zhengjiangliang 已提交
452 453 454 455 456 457 458 459

    displayClass.getCutoutInfo((err, data) => {
        if (err.code) {
            console.error('Failed to get cutoutInfo. Code: ' + JSON.stringify(err));
            return;
        }
        console.info('Succeeded in getting cutoutInfo. data: ' + JSON.stringify(data));
    });
Z
zhengjiangliang 已提交
460 461
} catch (exception) {
    console.error('Failed to obtain the default display object. Code: ' + JSON.stringify(exception));
Z
zhengjiangliang 已提交
462
}
X
xpeng 已提交
463 464
```
### getCutoutInfo<sup>9+</sup>
X
xpeng 已提交
465
getCutoutInfo(): Promise&lt;CutoutInfo&gt;
X
xpeng 已提交
466

L
leafly2021 已提交
467
获取挖孔屏、刘海屏、瀑布屏等不可用屏幕区域信息。使用Promise异步回调。建议应用布局规避该区域。
X
xpeng 已提交
468 469 470 471

**系统能力:** SystemCapability.WindowManager.WindowManager.Core

**返回值:**
472

X
xpeng 已提交
473 474 475 476
| 类型                | 说明                      |
| ------------------- | ------------------------- |
| Promise&lt;[CutoutInfo](#cutoutinfo9)&gt; | Promise对象,返回描述不可用屏幕区域的CutoutInfo对象。 |

Z
zhengjiangliang 已提交
477 478 479 480 481 482
**错误码:**

以下错误码的详细介绍请参见[屏幕错误码](../errorcodes/errorcode-display.md)

| 错误码ID | 错误信息 |
| ------- | ----------------------- |
483
| 1400001 | Invalid display or screen. |
Z
zhengjiangliang 已提交
484

X
xpeng 已提交
485
**示例:**
486

X
xpeng 已提交
487
```js
488
let displayClass = null;
Z
zhengjiangliang 已提交
489
try {
490
    displayClass = display.getDefaultDisplaySync();
Z
zhengjiangliang 已提交
491 492 493 494 495 496 497

    let promise = displayClass.getCutoutInfo();
    promise.then((data) => {
        console.info('Succeeded in getting cutoutInfo. Data: ' + JSON.stringify(data));
    }).catch((err) => {
        console.error('Failed to obtain all the display objects. Code: ' + JSON.stringify(err));
    });
Z
zhengjiangliang 已提交
498 499
} catch (exception) {
    console.error('Failed to obtain the default display object. Code: ' + JSON.stringify(exception));
Z
zhengjiangliang 已提交
500
}
501
```