• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Stage模型启动FA模型PageAbility
2
3
4本小节介绍Stage模型的两种应用组件如何启动FA模型的PageAbility组件。
5
6
7## UIAbility启动PageAbility
8
9  UIAbility启动PageAbility和UIAbility启动UIAbility的方式完全相同。
10
11> **说明:**
12> 需注意FA模型中abilityName由bundleName + AbilityName组成,具体见示例。
13
14```ts
15import { common, Want } from '@kit.AbilityKit';
16import { hilog } from '@kit.PerformanceAnalysisKit';
17import { BusinessError } from '@kit.BasicServicesKit';
18
19const TAG: string = '[Page_StartFAModel]';
20const DOMAIN_NUMBER: number = 0xFF00;
21
22@Entry
23@Component
24struct Page_StartFAModel {
25  private context = this.getUIContext().getHostContext() as common.UIAbilityContext;
26
27  build() {
28    Column() {
29      //...
30      List({ initialIndex: 0 }) {
31        ListItem() {
32          Row() {
33            //...
34          }
35          .onClick(() => {
36            let want: Want = {
37              bundleName: 'com.samples.famodelabilitydevelop',
38              abilityName: 'com.samples.famodelabilitydevelop.MainAbility'
39            };
40            this.context.startAbility(want).then(() => {
41              hilog.info(DOMAIN_NUMBER, TAG, 'Start Ability successfully.');
42            }).catch((error: BusinessError) => {
43              hilog.error(DOMAIN_NUMBER, TAG, `Ability failed: ` + JSON.stringify(error));
44            });
45          })
46        }
47        //...
48      }
49      //...
50    }
51    //...
52  }
53}
54```
55
56
57## UIAbility访问PageAbility(startAbilityForResult)
58
59startAbilityForResult和startAbility的区别是当PageAbility销毁的时候会返回执行结果。
60
61UIAbility通过startAbilityForResult启动PageAbility与UIAbility的代码一样,没有任何区别。
62
63
64```ts
65import { common, Want } from '@kit.AbilityKit';
66import { hilog } from '@kit.PerformanceAnalysisKit';
67import { BusinessError } from '@kit.BasicServicesKit';
68
69const TAG: string = '[Page_StartFAModel]';
70const DOMAIN_NUMBER: number = 0xFF00;
71
72@Entry
73@Component
74struct Page_StartFAModel {
75  private context = this.getUIContext().getHostContext() as common.UIAbilityContext;
76
77  build() {
78    Column() {
79      //...
80      List({ initialIndex: 0 }) {
81        ListItem() {
82          Row() {
83            //...
84          }
85          .onClick(() => {
86            let want: Want = {
87              bundleName: 'com.samples.famodelabilitydevelop',
88              abilityName: 'com.samples.famodelabilitydevelop.MainAbility',
89            };
90            this.context.startAbilityForResult(want).then((result) => {
91              hilog.info(DOMAIN_NUMBER, TAG, 'Ability verify result: ' + JSON.stringify(result));
92              if (result !== null) {
93                this.getUIContext().getPromptAction().showToast({
94                  message: JSON.stringify(result)
95                });
96              }
97            }).catch((error: BusinessError) => {
98              hilog.error(DOMAIN_NUMBER, TAG, `Ability failed: ` + JSON.stringify(error));
99            });
100          })
101        }
102        //...
103      }
104      //...
105    }
106    //...
107  }
108}
109```
110
111
112## ExtensionAbility启动PageAbility
113
114下面以ServiceExtensionAbility为例来说明ExtensionAbility启动PageAbility。ServiceExtensionAbility启动PageAbility和ServiceExtensionAbility启动UIAbility的方式完全相同。
115
116
117```ts
118import { Want, ServiceExtensionAbility } from '@kit.AbilityKit';
119import { hilog } from '@kit.PerformanceAnalysisKit';
120import { BusinessError } from '@kit.BasicServicesKit';
121import { rpc } from '@kit.IPCKit';
122import ServiceExtImpl from '../IdlServiceExt/idl_service_ext_impl';
123
124const TAG: string = '[ServiceExtAbility]';
125const DOMAIN_NUMBER: number = 0xFF00;
126
127export default class ServiceExtAbility extends ServiceExtensionAbility {
128  serviceExtImpl: ServiceExtImpl = new ServiceExtImpl('ExtImpl');
129
130  onCreate(want: Want): void {
131    let serviceExtensionContext = this.context;
132    hilog.info(DOMAIN_NUMBER, TAG, `onCreate, want: ${want.abilityName}`);
133  };
134
135  onRequest(want: Want, startId: number): void {
136    hilog.info(DOMAIN_NUMBER, TAG, `onRequest, want: ${want.abilityName}`);
137    if (want.parameters?.key === 'ConnectFaPageAbility') {
138      let wantFA: Want = {
139        bundleName: 'com.samples.famodelabilitydevelop',
140        abilityName: 'com.samples.famodelabilitydevelop.MainAbility',
141      };
142      this.context.startAbility(wantFA).then(() => {
143        hilog.info(DOMAIN_NUMBER, TAG, 'Start Ability successfully.');
144      }).catch((error: BusinessError) => {
145        hilog.error(DOMAIN_NUMBER, TAG, `Ability failed: ${JSON.stringify(error)}`);
146      });
147    }
148  };
149
150  onConnect(want: Want): rpc.RemoteObject {
151    hilog.info(DOMAIN_NUMBER, TAG, `onConnect, want: ${want.abilityName}`);
152    // 返回ServiceExtImpl对象,客户端获取后便可以与ServiceExtensionAbility进行通信
153    return this.serviceExtImpl as rpc.RemoteObject;
154  };
155
156  onDisconnect(want: Want): void {
157    hilog.info(DOMAIN_NUMBER, TAG, `onDisconnect, want: ${want.abilityName}`);
158  };
159
160  onDestroy(): void {
161    hilog.info(DOMAIN_NUMBER, TAG, 'onDestroy');
162  };
163}
164```
165