应用间互相跳转并传递数据
参考链接:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/application-models/uiability-intra-device-interaction.md#%E5%90%AF%E5%8A%A8%E5%85%B6%E4%BB%96%E5%BA%94%E7%94%A8%E7%9A%84uiability
let context = getContext(this) as common.UIAbilityContext; // UIAbilityContext
let want = {
deviceId: '', // deviceId为空表示本设备
bundleName: 'com.example.projectb',
moduleName: 'entry', // moduleName非必选
abilityName: 'EntryAbility',
parameters: { // 自定义信息
numa: 1,
numb: 2
},
}
// context为调用方UIAbility的UIAbilityContext
context.startAbility(want).then(() => {
console.info('Succeeded in starting ability.');
}).catch((err) => {
console.error(`Failed to start ability. Code is ${err.code}, message is ${err.message}`);
})
步骤:1. 构建want参数,要跳转对应应用的bundleName和moduleName
2. 调用context.startAbility方法跳转到对应应用
ProjectA
// index.ets
import UIAbility from '@ohos.app.ability.UIAbility'
import common from '@ohos.app.ability.common';
@Entry
@Component
struct Index {
@State message: string = 'ProjectA'
@StorageLink('sum') sum: number = 0;
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
Button('跳转ProjectB')
.onClick(() => {
let context = getContext(this) as common.UIAbilityContext; // UIAbilityContext
let want = {
deviceId: '', // deviceId为空表示本设备
bundleName: 'com.example.projectb',
moduleName: 'entry', // moduleName非必选
abilityName: 'EntryAbility',
parameters: { // 自定义信息
numa: 1,
numb: 2
},
}
// context为调用方UIAbility的UIAbilityContext
context.startAbility(want).then(() => {
console.info('Succeeded in starting ability.');
}).catch((err) => {
console.error(`Failed to start ability. Code is ${err.code}, message is ${err.message}`);
})
})
Text('从ProjectB拿到返回值' + this.sum)
}
.width('100%')
}
.height('100%')
}
}// EntryAbility.ts
onCreate(want, launchParam) {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
console.log('onNewWant');
let funcAbilityWant = want;
let sum = funcAbilityWant?.parameters?.sum;
AppStorage.SetOrCreate('sum', sum);
}
onNewWant(want) {
console.log('onNewWant');
let funcAbilityWant = want;
let sum = funcAbilityWant?.parameters?.sum;
AppStorage.SetOrCreate('sum', sum);
}
ProjectB
// index.ets
import common from '@ohos.app.ability.common'
@Entry
@Component
struct Index {
@State message: string = 'projectB'
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
Button('跳转ProjectA')
.onClick(() => {
let context = getContext(this) as common.UIAbilityContext; // UIAbilityContext
let want = {
deviceId: '', // deviceId为空表示本设备
bundleName: 'com.example.projecta',
moduleName: 'entry', // moduleName非必选
abilityName: 'EntryAbility',
parameters: { // 自定义信息
sum: AppStorage.Get('sum')
},
}
// context为调用方UIAbility的UIAbilityContext
context.startAbility(want).then(() => {
console.info('Succeeded in starting ability.');
}).catch((err) => {
console.error(`Failed to start ability. Code is ${err.code}, message is ${err.message}`);
})
})
}
.width('100%')
}
.height('100%')
}
}// EntryAbility.ts
onCreate(want, launchParam) {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
let funcAbilityWant = want;
let numa = funcAbilityWant?.parameters?.numa;
let numb = funcAbilityWant?.parameters?.numb;
console.log('testTwoApp' + numa + numb);
let sum = numa + numb;
AppStorage.SetOrCreate('sum', sum);
}
onNewWant(want) {
console.log('onNewWant');
let funcAbilityWant = want;
let numa = funcAbilityWant?.parameters?.numa;
let numb = funcAbilityWant?.parameters?.numb;
console.log('testTwoApp' + numa + numb);
let sum = numa + numb;
AppStorage.SetOrCreate('sum', sum);
}
参考视频:https://www.bilibili.com/video/BV1AV411V7yn/?vd_source=ca38750c3d4234b7d9d5f8fd31f855d1