实现思路:
import { common, Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
@Entry
@Component
struct Index {
message: string = 'Hello TestA';
build() {
Column() {
Text(this.message)
.id('HelloWorld')
.fontSize($r('app.float.page_text_font_size'))
.fontWeight(FontWeight.Bold)
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
});
// 跳转到TestB应用并携带msg参数
Button('to TestB')
.onClick(() => {
let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
let want: Want = {
uri: 'link://www.testb.com',
parameters: {
msg: 'Hello TestB, I am TestA.'
}
};
try {
context.startAbility(want).then(() => {
console.info('start ability success.');
}).catch((err: BusinessError) => {
console.error(`start ability failed. Code is ${err.code}, message is ${err.message}`);
});
} catch (paramError) {
console.error(`Failed to start ability. Code is ${paramError.code}, message is ${paramError.message}`);
}
});
}
.justifyContent(FlexAlign.Center)
.height('100%')
.width('100%');
}
} import { ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';
const DOMAIN = 0x0000;
export default class EntryAbility extends UIAbility {
onCreate(want: Want): void {
try {
this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET);
} catch (err) {
hilog.error(DOMAIN, 'testTag', 'Failed to set colorMode. Cause: %{public}s', JSON.stringify(err));
}
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onCreate');
// 应用冷启动,调用getAndSetParameter方法获取外部参数并存入
this.getAndSetParameter(want);
}
onDestroy(): void {
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onDestroy');
}
onWindowStageCreate(windowStage: window.WindowStage): void {
// Main window is created, set main page for this ability
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
windowStage.loadContent('pages/Index', this.storage, (err) => {
if (err.code) {
hilog.error(DOMAIN, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err));
return;
}
hilog.info(DOMAIN, 'testTag', 'Succeeded in loading the content.');
});
}
onWindowStageDestroy(): void {
// Main window is destroyed, release UI related resources
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
}
onForeground(): void {
// Ability has brought to foreground
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onForeground');
}
onBackground(): void {
// Ability has back to background
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onBackground');
}
onNewWant(want: Want) {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onNewWant');
// 应用热启动,调用getAndSetParameter方法获取外部参数并存入
this.getAndSetParameter(want);
}
// 获取LocalStorage实例
storage: LocalStorage = new LocalStorage();
// 获取外部参数并存入LocalStorage实例中
getAndSetParameter(want: Want): void {
let parameters = want.parameters;
if (parameters === null || parameters === undefined) {
console.error('获取外部参数失败');
return;
}
let msg = want.parameters?.msg;
this.storage.setOrCreate('msg', msg);
}
}; @Entry
@Component
struct Index {
localStorage = this.getUIContext().getSharedLocalStorage();
message: string = 'Hello TestB';
@State msg: string = 'I am TestB';
onPageShow(): void {
let val: string = this.localStorage?.get('msg') as string;
if (val === null || val === undefined) {
return;
}
this.msg = val;
}
build() {
Column() {
Text(this.message)
.fontSize($r('app.float.page_text_font_size'))
.fontWeight(FontWeight.Bold);
Text(this.msg)
.fontSize(25)
.fontWeight(FontWeight.Bold);
}
.justifyContent(FlexAlign.Center)
.height('100%')
.width('100%');
}
}