• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.app.ability.CompletionHandler (拉起应用结果的操作类)
2<!--Kit: Ability Kit-->
3<!--Subsystem: Ability-->
4<!--Owner: @littlejerry1; @yangxuguang-huawei; @Luobniz21-->
5<!--Designer: @ccllee1-->
6<!--Tester: @lixueqing513-->
7<!--Adviser: @huipeizi-->
8
9CompletionHandler作为[StartOptions](js-apis-app-ability-startOptions.md)的可选参数,用于处理拉起应用请求的结果。
10
11
12> **说明:**
13>
14> - 本模块首批接口从API version 20 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
15>
16> - 本模块接口仅可在Stage模型下使用。
17
18
19## 约束限制
20
21当前支持使用该模块的接口包括:
22- [startAbility](js-apis-inner-application-uiAbilityContext.md#startability-2)
23- [startAbilityForResult](js-apis-inner-application-uiAbilityContext.md#startabilityforresult-2)
24
25<!--Del-->
26- [startAbilityForResultWithAccount](js-apis-inner-application-uiAbilityContext-sys.md#startabilityforresultwithaccount-2)
27- [startAbilityWithAccount](js-apis-inner-application-uiAbilityContext-sys.md#startabilitywithaccount-2)
28- [startRecentAbility](js-apis-inner-application-uiAbilityContext-sys.md#startrecentability-2)
29- [startAbilityAsCaller](js-apis-inner-application-uiAbilityContext-sys.md#startabilityascaller10-2)
30<!--DelEnd-->
31
32## 导入模块
33
34```ts
35import { CompletionHandler } from '@kit.AbilityKit';
36```
37
38## CompletionHandler
39
40CompletionHandler提供了[onRequestSuccess](#onrequestsuccess)和[onRequestFailure](#onrequestfailure)两个回调函数,分别用来处理拉起应用成功和失败时的结果。
41
42### onRequestSuccess
43
44onRequestSuccess(elementName: ElementName, message: string): void
45
46拉起应用成功时的回调函数。
47
48**原子化服务API**:从API version 20开始,该接口支持在原子化服务中使用。
49
50**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
51
52**参数:**
53
54| 参数名 | 类型 | 必填 | 说明 |
55| -------- | -------- | -------- | -------- |
56| elementName | [ElementName](js-apis-bundleManager-elementName.md) | 是 | ElementName信息用于标识被拉起应用。通常,ElementName仅包含abilityName和bundleName。moduleName和deviceId信息是否存在取决于调用方是否传入。shortName和uri为空。|
57| message | string | 是 | 成功拉起应用时的信息。该信息采用JSON格式,样式如下:<br>{<br>&emsp;"errMsg": "Succeeded."<br>}</br> |
58
59**示例:**
60
61参见[CompletionHandler使用](#completionhandler使用)。
62
63### onRequestFailure
64
65onRequestFailure(elementName: ElementName, message: string): void
66
67拉起应用失败时的回调函数。
68
69**原子化服务API**:从API version 20开始,该接口支持在原子化服务中使用。
70
71**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
72
73**参数:**
74
75| 参数名 | 类型 | 必填 | 说明 |
76| -------- | -------- | -------- | -------- |
77| elementName | [ElementName](js-apis-bundleManager-elementName.md) | 是 | ElementName信息用于标识被拉起应用。<br>- 通常,ElementName仅包含abilityName和bundleName。moduleName和deviceId信息是否存在取决于调用方是否传入。shortName和uri为空。<br>- 隐式启动失败时,无法获取ElementName信息。 |
78| message | string | 是 | 拉起应用失败时的信息。该信息采用JSON格式,样式如下:<br>{<br>&emsp;"errMsg": "xxx"<br>}<br>其中,"xxx"的取值说明如下:<br>Failed to call \<api-name\>:表示调用接口出错。其中,\<api-name\>为具体的接口名,比如startAbility。<br>User refused redirection:表示用户关闭了应用跳转弹框。<br>User closed the implicit startup picker:表示用户关闭了隐式启动时的应用选择弹框。<br>User closed the app clone picker:表示用户关闭了分身应用选择弹框。<br>Free installation failed:表示免安装失败。</br> |
79
80**示例:**
81
82参见[CompletionHandler使用](#completionhandler使用)。
83
84### CompletionHandler使用
85
86  ```ts
87  import { UIAbility, Want, StartOptions, CompletionHandler, bundleManager } from '@kit.AbilityKit';
88  import { BusinessError } from '@kit.BasicServicesKit';
89
90  export default class EntryAbility extends UIAbility {
91    onForeground() {
92      let want: Want = {
93        deviceId: '',
94        bundleName: 'com.example.myapplication',
95        abilityName: 'EntryAbility'
96      };
97
98      let completionHandler: CompletionHandler = {
99        onRequestSuccess: (elementName: bundleManager.ElementName, message: string): void => {
100          console.info(`${elementName.bundleName}-${elementName.moduleName}-${elementName.abilityName} start succeeded: ${message}`);
101        },
102        onRequestFailure: (elementName: bundleManager.ElementName, message: string): void => {
103          console.error(`${elementName.bundleName}-${elementName.moduleName}-${elementName.abilityName} start failed: ${message}`);
104        }
105      };
106
107      let options: StartOptions = {
108        completionHandler: completionHandler
109      };
110
111      try {
112        this.context.startAbility(want, options, (err: BusinessError) => {
113          if (err.code) {
114            // 处理业务逻辑错误
115            console.error(`startAbility failed, code is ${err.code}, message is ${err.message}`);
116            return;
117          }
118          // 执行正常业务
119          console.info('startAbility succeed');
120        });
121      } catch (err) {
122        // 处理入参错误异常
123        let code = (err as BusinessError).code;
124        let message = (err as BusinessError).message;
125        console.error(`startAbility failed, code is ${code}, message is ${message}`);
126      }
127    }
128  }
129  ```
130