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 = getContext(this) 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'; 68import { promptAction } from '@kit.ArkUI'; 69 70const TAG: string = '[Page_StartFAModel]'; 71const DOMAIN_NUMBER: number = 0xFF00; 72 73@Entry 74@Component 75struct Page_StartFAModel { 76 private context = getContext(this) as common.UIAbilityContext; 77 78 build() { 79 Column() { 80 //... 81 List({ initialIndex: 0 }) { 82 ListItem() { 83 Row() { 84 //... 85 } 86 .onClick(() => { 87 let want: Want = { 88 bundleName: 'com.samples.famodelabilitydevelop', 89 abilityName: 'com.samples.famodelabilitydevelop.MainAbility', 90 }; 91 this.context.startAbilityForResult(want).then((result) => { 92 hilog.info(DOMAIN_NUMBER, TAG, 'Ability verify result: ' + JSON.stringify(result)); 93 if (result !== null) { 94 promptAction.showToast({ 95 message: JSON.stringify(result) 96 }); 97 } 98 }).catch((error: BusinessError) => { 99 hilog.error(DOMAIN_NUMBER, TAG, `Ability failed: ` + JSON.stringify(error)); 100 }); 101 }) 102 } 103 //... 104 } 105 //... 106 } 107 //... 108 } 109} 110``` 111 112 113## ExtensionAbility启动PageAbility 114 115下面以ServiceExtensionAbility为例来说明ExtensionAbility启动PageAbility。ServiceExtensionAbility启动PageAbility和ServiceExtensionAbility启动UIAbility的方式完全相同。 116 117 118```ts 119import { Want, ServiceExtensionAbility } from '@kit.AbilityKit'; 120import { hilog } from '@kit.PerformanceAnalysisKit'; 121import { BusinessError } from '@kit.BasicServicesKit'; 122import { rpc } from '@kit.IPCKit'; 123import ServiceExtImpl from '../IdlServiceExt/idl_service_ext_impl'; 124 125const TAG: string = '[ServiceExtAbility]'; 126const DOMAIN_NUMBER: number = 0xFF00; 127 128export default class ServiceExtAbility extends ServiceExtensionAbility { 129 serviceExtImpl: ServiceExtImpl = new ServiceExtImpl('ExtImpl'); 130 131 onCreate(want: Want): void { 132 let serviceExtensionContext = this.context; 133 hilog.info(DOMAIN_NUMBER, TAG, `onCreate, want: ${want.abilityName}`); 134 }; 135 136 onRequest(want: Want, startId: number): void { 137 hilog.info(DOMAIN_NUMBER, TAG, `onRequest, want: ${want.abilityName}`); 138 if (want.parameters?.key === 'ConnectFaPageAbility') { 139 let wantFA: Want = { 140 bundleName: 'com.samples.famodelabilitydevelop', 141 abilityName: 'com.samples.famodelabilitydevelop.MainAbility', 142 }; 143 this.context.startAbility(wantFA).then(() => { 144 hilog.info(DOMAIN_NUMBER, TAG, 'Start Ability successfully.'); 145 }).catch((error: BusinessError) => { 146 hilog.info(DOMAIN_NUMBER, TAG, `Ability failed: ${JSON.stringify(error)}`); 147 }); 148 } 149 }; 150 151 onConnect(want: Want): rpc.RemoteObject { 152 hilog.info(DOMAIN_NUMBER, TAG, `onConnect, want: ${want.abilityName}`); 153 // 返回ServiceExtImpl对象,客户端获取后便可以与ServiceExtensionAbility进行通信 154 return this.serviceExtImpl as rpc.RemoteObject; 155 }; 156 157 onDisconnect(want: Want): void { 158 hilog.info(DOMAIN_NUMBER, TAG, `onDisconnect, want: ${want.abilityName}`); 159 }; 160 161 onDestroy(): void { 162 hilog.info(DOMAIN_NUMBER, TAG, 'onDestroy'); 163 }; 164} 165``` 166