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