harmony 鸿蒙Starting a PageAbility from the Stage Model
Starting a PageAbility from the Stage Model
This topic describes how the two application components of the stage model start the PageAbility component of the FA model.
UIAbility Starting a PageAbility
A UIAbility starts a PageAbility in the same way as it starts another UIAbility.
NOTE
In the FA model, abilityName consists of bundleName and AbilityName. For details, see the code snippet below.
import { common, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
const TAG: string = '[Page_StartFAModel]';
const DOMAIN_NUMBER: number = 0xFF00;
@Entry
@Component
struct Page_StartFAModel {
private context = this.getUIContext().getHostContext() as common.UIAbilityContext;
build() {
Column() {
//...
List({ initialIndex: 0 }) {
ListItem() {
Row() {
//...
}
.onClick(() => {
let want: Want = {
bundleName: 'com.samples.famodelabilitydevelop',
abilityName: 'com.samples.famodelabilitydevelop.MainAbility'
};
this.context.startAbility(want).then(() => {
hilog.info(DOMAIN_NUMBER, TAG, 'Start Ability successfully.');
}).catch((error: BusinessError) => {
hilog.error(DOMAIN_NUMBER, TAG, `Ability failed: ` + JSON.stringify(error));
});
})
}
//...
}
//...
}
//...
}
}
UIAbility Accessing a PageAbility (startAbilityForResult)
Different from startAbility(), startAbilityForResult() obtains the execution result when the PageAbility is destroyed.
A UIAbility starts a PageAbility through startAbilityForResult() in the same way as it starts another UIAbility.
import { common, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
const TAG: string = '[Page_StartFAModel]';
const DOMAIN_NUMBER: number = 0xFF00;
@Entry
@Component
struct Page_StartFAModel {
private context = this.getUIContext().getHostContext() as common.UIAbilityContext;
build() {
Column() {
//...
List({ initialIndex: 0 }) {
ListItem() {
Row() {
//...
}
.onClick(() => {
let want: Want = {
bundleName: 'com.samples.famodelabilitydevelop',
abilityName: 'com.samples.famodelabilitydevelop.MainAbility',
};
this.context.startAbilityForResult(want).then((result) => {
hilog.info(DOMAIN_NUMBER, TAG, 'Ability verify result: ' + JSON.stringify(result));
if (result !== null) {
this.getUIContext().getPromptAction().showToast({
message: JSON.stringify(result)
});
}
}).catch((error: BusinessError) => {
hilog.error(DOMAIN_NUMBER, TAG, `Ability failed: ` + JSON.stringify(error));
});
})
}
//...
}
//...
}
//...
}
}
ExtensionAbility Starting a PageAbility
The following uses the ServiceExtensionAbility component as an example to describe how an ExtensionAbility starts a PageAbility. A ServiceExtensionAbility starts a PageAbility in the same way as it starts a UIAbility.
import { Want, ServiceExtensionAbility } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { rpc } from '@kit.IPCKit';
import ServiceExtImpl from '../IdlServiceExt/idl_service_ext_impl';
const TAG: string = '[ServiceExtAbility]';
const DOMAIN_NUMBER: number = 0xFF00;
export default class ServiceExtAbility extends ServiceExtensionAbility {
serviceExtImpl: ServiceExtImpl = new ServiceExtImpl('ExtImpl');
onCreate(want: Want): void {
let serviceExtensionContext = this.context;
hilog.info(DOMAIN_NUMBER, TAG, `onCreate, want: ${want.abilityName}`);
};
onRequest(want: Want, startId: number): void {
hilog.info(DOMAIN_NUMBER, TAG, `onRequest, want: ${want.abilityName}`);
if (want.parameters?.key === 'ConnectFaPageAbility') {
let wantFA: Want = {
bundleName: 'com.samples.famodelabilitydevelop',
abilityName: 'com.samples.famodelabilitydevelop.MainAbility',
};
this.context.startAbility(wantFA).then(() => {
hilog.info(DOMAIN_NUMBER, TAG, 'Start Ability successfully.');
}).catch((error: BusinessError) => {
hilog.error(DOMAIN_NUMBER, TAG, `Ability failed: ${JSON.stringify(error)}`);
});
}
};
onConnect(want: Want): rpc.RemoteObject {
hilog.info(DOMAIN_NUMBER, TAG, `onConnect, want: ${want.abilityName}`);
// Return the ServiceExtImpl object, through which the client can communicate with the ServiceExtensionAbility.
return this.serviceExtImpl as rpc.RemoteObject;
};
onDisconnect(want: Want): void {
hilog.info(DOMAIN_NUMBER, TAG, `onDisconnect, want: ${want.abilityName}`);
};
onDestroy(): void {
hilog.info(DOMAIN_NUMBER, TAG, 'onDestroy');
};
}
你可能感兴趣的鸿蒙文章
harmony 鸿蒙Obtaining Reasons for Abnormal Application Exits
harmony 鸿蒙UIAbility Backup and Restore
harmony 鸿蒙Using Explicit Want to Start an Application Component
harmony 鸿蒙Introduction to Ability Kit
harmony 鸿蒙AbilityStage Component Container
harmony 鸿蒙Accessing a DataAbility
harmony 鸿蒙Accessing a DataShareExtensionAbility from the FA Model
harmony 鸿蒙Common action and entities Values (Not Recommended)
- 所属分类: 后端技术
- 本文标签:
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦