js-apis-app-ability-dialogRequest.md 12.8 KB
Newer Older
C
caochunlei 已提交
1 2 3 4 5 6 7 8 9 10 11 12
# @ohos.app.ability.dialogRequest (dialogRequest模块)

dialogRequest模块用于处理模态弹框的能力,包括获取RequestInfo(用于绑定模态弹框)、获取RequestCallback(用于设置结果)。
模态弹框是指一个系统弹出框,其特点在于:该弹出框会拦截弹框之下的页面的鼠标、键盘、触屏等事件,销毁该弹框,才能操作下面的页面。

> **说明:**
>
>  - 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
>  - 本模块接口在ServiceExtensionAbility下使用,如果ServiceExtensionAbility实现了模态弹框,则可以使用本模块的接口获取请求方的RequestInfo、RequestCallback并返回请求结果。

## 导入模块

L
liuliu 已提交
13
```ts
C
caochunlei 已提交
14 15 16 17 18 19 20 21 22 23 24 25 26
import dialogRequest from '@ohos.app.ability.dialogRequest';
```

## dialogRequest.getRequestInfo

getRequestInfo(want: Want): RequestInfo

从Want中获取请求方的RequestInfo。

**系统能力**:SystemCapability.Ability.AbilityRuntime.Core

**参数:**

27
| 参数名 | 类型   | 必填 | 说明                        |
C
caochunlei 已提交
28 29 30 31 32 33 34 35 36 37 38 39 40
| ---- | ------ | ---- | --------------------------- |
| want  | [Want](js-apis-application-want.md) | 是   | 表示发起方请求弹框时传入的want信息。 |

**返回值:**

| 类型   | 说明                     |
| ------ | ------------------------ |
| [RequestInfo](#requestinfo) | 请求方RequestInfo,用于绑定模态窗口。 |

**示例:**

```ts
   import ServiceExtensionAbility from '@ohos.app.ability.ServiceExtensionAbility';
L
liuliu 已提交
41
   import Want from '@ohos.app.ability.Want';
C
caochunlei 已提交
42 43 44
   import rpc from '@ohos.rpc';
   import dialogRequest from '@ohos.app.ability.dialogRequest';

45
    const REQUEST_VALUE = 1;
C
caochunlei 已提交
46

47
    class StubTest extends rpc.RemoteObject {
L
liuliu 已提交
48
      constructor(des: string) {
49 50 51
        super(des);
      }

L
liuliu 已提交
52
      onRemoteRequest(code: number, data: rpc.MessageParcel, reply: rpc.MessageParcel, option: rpc.MessageOption) {
53 54 55 56
        if (code === REQUEST_VALUE) {
          let optFir = data.readInt();
          let optSec = data.readInt();
          reply.writeInt(optFir + optSec);
C
caochunlei 已提交
57
        }
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
        return true;
      }

      getInterfaceDescriptor() {
        return "";
      }

      getCallingPid() {
        return REQUEST_VALUE;
      }

      getCallingUid() {
        return REQUEST_VALUE;
      }

L
liuliu 已提交
73
      attachLocalInterface(localInterface: rpc.IRemoteBroker, descriptor: string) {
74 75 76 77 78 79
      }
    }

    let TAG = "getRequestInfoTest";

    export default class ServiceExtAbility extends ServiceExtensionAbility {
L
liuliu 已提交
80
      onCreate(want: Want) {
81 82 83
        console.info(TAG, `onCreate, want: ${want.abilityName}`);
      }

L
liuliu 已提交
84
      onRequest(want: Want, startId: number) {
85 86
        console.info(TAG, `onRequest, want: ${want.abilityName}`);
        try {
L
liuliu 已提交
87
          let requestInfo = dialogRequest.getRequestInfo(want);
88 89 90 91
        } catch (err) {
          console.error('getRequestInfo err= ${JSON.stringify(err)}');
        }
      }
C
caochunlei 已提交
92

L
liuliu 已提交
93
      onConnect(want: Want) {
94 95 96
        console.info(TAG, `onConnect, want: ${want.abilityName}`);
        return new StubTest("test");
      }
C
caochunlei 已提交
97

L
liuliu 已提交
98
      onDisconnect(want: Want) {
99 100
        console.info(TAG, `onDisconnect, want: ${want.abilityName}`);
      }
C
caochunlei 已提交
101

102 103 104 105
      onDestroy() {
        console.info(TAG, `onDestroy`);
      }
    }
C
caochunlei 已提交
106 107 108 109 110 111 112 113 114 115 116 117
   ```

## dialogRequest.getRequestCallback

getRequestCallback(want: Want): RequestCallback

从Want中获取请求方的RequestCallback。

**系统能力**:SystemCapability.Ability.AbilityRuntime.Core

**参数:**

118
| 参数名 | 类型   | 必填 | 说明                        |
C
caochunlei 已提交
119 120 121 122 123 124 125 126 127 128 129 130 131
| ---- | ------ | ---- | --------------------------- |
| want  | [Want](js-apis-application-want.md) | 是   | 表示发起方请求弹框时传入的want信息。 |

**返回值:**

| 类型   | 说明                     |
| ------ | ------------------------ |
| [RequestCallback](#requestcallback) | 请求方RequestCallback,用于设置返回结果。 |

**示例:**

```ts
   import ServiceExtensionAbility from '@ohos.app.ability.ServiceExtensionAbility';
L
liuliu 已提交
132
   import Want from '@ohos.app.ability.Want';
C
caochunlei 已提交
133 134
   import rpc from '@ohos.rpc';
   import dialogRequest from '@ohos.app.ability.dialogRequest';
135 136 137 138 139 140
   
   let TAG = "getRequestCallbackTest";

   const REQUEST_VALUE = 1;

    class StubTest extends rpc.RemoteObject {
L
liuliu 已提交
141
      constructor(des: string) {
142 143 144
        super(des);
      }

L
liuliu 已提交
145
      onRemoteRequest(code: number, data: rpc.MessageParcel, reply: rpc.MessageParcel, option: rpc.MessageOption) {
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
        if (code === REQUEST_VALUE) {
          let optFir = data.readInt();
          let optSec = data.readInt();
          reply.writeInt(optFir + optSec);
        }
        return true;
      }

      getInterfaceDescriptor() {
        return "";
      }

      getCallingPid() {
        return REQUEST_VALUE;
      }

      getCallingUid() {
        return REQUEST_VALUE;
      }

L
liuliu 已提交
166
      attachLocalInterface(localInterface: rpc.IRemoteBroker, descriptor: string) {
167 168
      }
    }
C
caochunlei 已提交
169 170

   export default class ServiceExtAbility extends ServiceExtensionAbility {
L
liuliu 已提交
171
     onCreate(want: Want) {
C
caochunlei 已提交
172 173 174
       console.info(TAG, `onCreate, want: ${want.abilityName}`);
     }

L
liuliu 已提交
175
     onRequest(want: Want, startId: number) {
C
caochunlei 已提交
176 177
       console.info(TAG, `onRequest, want: ${want.abilityName}`);
       try {
L
liuliu 已提交
178
            let requestCallback = dialogRequest.getRequestCallback(want);
C
caochunlei 已提交
179
        } catch(err) {
M
mingxihua 已提交
180
            console.error('getRequestInfo err= ${JSON.stringify(err)}');
C
caochunlei 已提交
181 182 183
        }
     }

L
liuliu 已提交
184
     onConnect(want: Want) {
C
caochunlei 已提交
185
       console.info(TAG, `onConnect, want: ${want.abilityName}`);
186
       return new StubTest("test");
C
caochunlei 已提交
187 188
     }

L
liuliu 已提交
189
     onDisconnect(want: Want) {
C
caochunlei 已提交
190 191 192 193 194 195 196 197 198
       console.info(TAG, `onDisconnect, want: ${want.abilityName}`);
     }

     onDestroy() {
       console.info(TAG, `onDestroy`);
     }
   }
   ```

W
wuhaohao7 已提交
199 200 201 202 203 204 205 206 207 208 209 210 211
## WindowRect<sup>10+</sup>

表示模态弹框的属性。

**系统能力**:SystemCapability.Ability.AbilityRuntime.Core

| 名称 | 类型   | 必填 | 说明                        |
| ---- | ------ | ---- | --------------------------- |
| left  | number | 否   | 弹框边框的左上角的X坐标。 |
| top  | number | 否   | 弹框边框的左上角的Y坐标。 |
| width  | number | 否   | 弹框的宽度。 |
| height  | number | 否   | 弹框的高度。 |

C
caochunlei 已提交
212 213 214
## RequestInfo

表示发起方请求信息,作为窗口绑定模态弹框的入参。
W
wuhaohao7 已提交
215

216
**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
C
caochunlei 已提交
217

W
wuhaohao7 已提交
218 219 220 221
| 名称      | 类型       | 必填   | 说明     |
| ------------ | ------------------| ------ | ---------------------- |
| windowRect<sup>10+</sup>            | windowRect    | 否   | 表示模态弹框的位置属性。          |

C
caochunlei 已提交
222 223 224 225
**示例:**

```ts
   import ServiceExtensionAbility from '@ohos.app.ability.ServiceExtensionAbility';
L
liuliu 已提交
226 227
   import Want from '@ohos.app.ability.Want';
   import { BusinessError } from '@ohos.base';
C
caochunlei 已提交
228 229 230
   import rpc from '@ohos.rpc';
   import dialogRequest from '@ohos.app.ability.dialogRequest';
   import window from '@ohos.window';
231 232 233 234 235 236
   
   let TAG = "RequestInfoTest";

   const REQUEST_VALUE = 1;

    class StubTest extends rpc.RemoteObject {
L
liuliu 已提交
237
      constructor(des: string) {
238 239 240
        super(des);
      }

L
liuliu 已提交
241
      onRemoteRequest(code: number, data: rpc.MessageParcel, reply: rpc.MessageParcel, option: rpc.MessageOption) {
242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261
        if (code === REQUEST_VALUE) {
          let optFir = data.readInt();
          let optSec = data.readInt();
          reply.writeInt(optFir + optSec);
        }
        return true;
      }

      getInterfaceDescriptor() {
        return "";
      }

      getCallingPid() {
        return REQUEST_VALUE;
      }

      getCallingUid() {
        return REQUEST_VALUE;
      }

L
liuliu 已提交
262
      attachLocalInterface(localInterface: rpc.IRemoteBroker, descriptor: string) {
263 264
      }
    }
C
caochunlei 已提交
265 266

   export default class ServiceExtAbility extends ServiceExtensionAbility {
L
liuliu 已提交
267
     onCreate(want: Want) {
C
caochunlei 已提交
268 269 270
       console.info(TAG, `onCreate, want: ${want.abilityName}`);
     }

L
liuliu 已提交
271
     onRequest(want: Want, startId: number) {
C
caochunlei 已提交
272
       console.info(TAG, `onRequest, want: ${want.abilityName}`);
L
liuliu 已提交
273 274
       let windowClass: window.Window | undefined = undefined;
       let config: window.Configuration = {name: "dialogWindow", windowType: window.WindowType.TYPE_DIALOG, ctx: this.context};
C
caochunlei 已提交
275
       try {
L
liuliu 已提交
276 277 278 279 280 281 282 283
            let requestInfo = dialogRequest.getRequestInfo(want);
            window.createWindow(config, (err, data) => {
              if (err.code) {
                  console.error('Failed to create the window. Cause: ' + JSON.stringify(err));
                  return;
              }
              windowClass = data;
              windowClass.bindDialogTarget(requestInfo, () => {
C
caochunlei 已提交
284
                console.info('Dialog Window Need Destroy.');
L
liuliu 已提交
285 286 287 288 289 290 291
              }, (err: BusinessError) => {
                  if (err.code) {
                      console.error('Failed to bind dialog target. Cause: ${JSON.stringify(err)}');
                      return;
                  }
                  console.info('Succeeded in binding dialog target.');
              });
C
caochunlei 已提交
292 293
            });
        } catch(err) {
M
mingxihua 已提交
294
            console.error('getRequestInfo err= ${JSON.stringify(err)}');
C
caochunlei 已提交
295 296 297
        }
     }

L
liuliu 已提交
298
     onConnect(want: Want) {
C
caochunlei 已提交
299
       console.info(TAG, `onConnect, want: ${want.abilityName}`);
L
liuliu 已提交
300
       return new StubTest("test");
C
caochunlei 已提交
301 302
     }

L
liuliu 已提交
303
     onDisconnect(want: Want) {
C
caochunlei 已提交
304 305 306 307 308 309 310 311 312 313 314 315 316
       console.info(TAG, `onDisconnect, want: ${want.abilityName}`);
     }

     onDestroy() {
       console.info(TAG, `onDestroy`);
     }
   }
   ```

## ResultCode

模态弹框请求结果码。

317
**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
C
caochunlei 已提交
318

Y
yuyaozhi 已提交
319
| 名称      | 值          | 说明     |
C
caochunlei 已提交
320 321 322 323 324 325 326 327 328
| ------------ | ------------------ | ---------------------- |
| RESULT_OK            | 0          | 表示成功。          |
| RESULT_CANCEL        | 1          | 表示失败。          |

## RequestResult
模态弹框请求结果,当前只包含结果码,即RequestResult只当前只有ResultCode这一个成员。

## 属性

329
**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
C
caochunlei 已提交
330 331 332 333

| 名称 | 类型 | 可读 | 可写 | 说明 |
| -------- | -------- | -------- | -------- | -------- |
| result | [ResultCode](#resultcode) | 是 | 是 | 表示结果码。 |
W
wuhaohao7 已提交
334
| want<sup>10+</sup> | [ResultWant](js-apis-application-want.md)  | 是 | 是 | 表示Want类型信息,如ability名称,包名等。。 |
C
caochunlei 已提交
335 336 337 338 339 340 341 342 343 344 345

## RequestCallback

用于设置模态弹框请求结果的callback接口。

### RequestCallback.setRequestResult

setRequestResult(result: RequestResult): void;

设置请求结果

Y
yuyaozhi 已提交
346
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
C
caochunlei 已提交
347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365

**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| result | [RequestResult](#requestresult) | 是 | 模态弹框请求结果信息。 |

**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
| 401 | If the input parameter is not valid parameter. |

以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)

**示例:**

```ts
   import ServiceExtensionAbility from '@ohos.app.ability.ServiceExtensionAbility';
L
liuliu 已提交
366
   import Want from '@ohos.app.ability.Want';
C
caochunlei 已提交
367 368
   import rpc from '@ohos.rpc';
   import dialogRequest from '@ohos.app.ability.dialogRequest';
369 370 371 372 373 374
   
   let TAG = "setRequestResultTest";

      const REQUEST_VALUE = 1;

    class StubTest extends rpc.RemoteObject {
L
liuliu 已提交
375
      constructor(des: string) {
376 377 378
        super(des);
      }

L
liuliu 已提交
379
      onRemoteRequest(code: number, data: rpc.MessageParcel, reply: rpc.MessageParcel, option: rpc.MessageOption) {
380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399
        if (code === REQUEST_VALUE) {
          let optFir = data.readInt();
          let optSec = data.readInt();
          reply.writeInt(optFir + optSec);
        }
        return true;
      }

      getInterfaceDescriptor() {
        return "";
      }

      getCallingPid() {
        return REQUEST_VALUE;
      }

      getCallingUid() {
        return REQUEST_VALUE;
      }

L
liuliu 已提交
400
      attachLocalInterface(localInterface: rpc.IRemoteBroker, descriptor: string) {
401 402
      }
    }
C
caochunlei 已提交
403 404

   export default class ServiceExtAbility extends ServiceExtensionAbility {
L
liuliu 已提交
405
     onCreate(want: Want) {
C
caochunlei 已提交
406 407 408
       console.info(TAG, `onCreate, want: ${want.abilityName}`);
     }

L
liuliu 已提交
409
     onRequest(want: Want, startId: number) {
C
caochunlei 已提交
410 411
       console.info(TAG, `onRequest, want: ${want.abilityName}`);
       try {
L
liuliu 已提交
412 413
            let requestCallback = dialogRequest.getRequestCallback(want);
            let myResult: dialogRequest.RequestResult = {
C
caochunlei 已提交
414 415 416 417
                result : dialogRequest.ResultCode.RESULT_CANCEL,
            };
            requestCallback.setRequestResult(myResult);
        } catch(err) {
M
mingxihua 已提交
418
            console.error('getRequestInfo err= ${JSON.stringify(err)}');
C
caochunlei 已提交
419 420 421
        }
     }

L
liuliu 已提交
422
     onConnect(want: Want) {
C
caochunlei 已提交
423
       console.info(TAG, `onConnect, want: ${want.abilityName}`);
L
liuliu 已提交
424
       return new StubTest("test");
C
caochunlei 已提交
425 426
     }

L
liuliu 已提交
427
     onDisconnect(want: Want) {
C
caochunlei 已提交
428 429 430 431 432 433 434 435
       console.info(TAG, `onDisconnect, want: ${want.abilityName}`);
     }

     onDestroy() {
       console.info(TAG, `onDestroy`);
     }
   }
  ```