我有 PushMessageAbility、EntryAbility 两个UIAbility。在 PushMessageAbility 中获取推送信息,想要传递给 EntryAbility 应该怎么实现。我现在是通过eventHub,是不能实现。代码如下。AppStorage 可以实现吗?
import { UIAbility } from '@kit.AbilityKit';
import { pushService, pushCommon } from '@kit.PushKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { promptAction } from '@kit.ArkUI';
import { Constants, CordovaLog } from '@ohos/cordova/src/main/ets/utils/Index';
/**
* 此处以PushMessageAbility为例,接收BACKGROUND消息内容
*/
export default class PushMessageAbility extends UIAbility {
onCreate(): void {
try {
pushService.receiveMessage('BACKGROUND', this, (data: pushCommon.PushPayload) => {
let pushData = data.data
// AppStorage.setOrCreate('OnOpenNotificationStorage', pushData);
this.context.eventHub.emit('OnReceiveMessage', pushData)
});
} catch (err) {
let e: BusinessError = err as BusinessError;
CordovaLog.e(Constants.TAG, 'Get background msg failed: %{public}d %{public}s', e.code, e.message)
}
}
}
struct Index {
// 一个页面支持有多个CordovaWeb容器
private readonly listeners: List<OnEventListener> = new List()
private cordovaWebView: CordovaWebView | undefined = new CordovaWebViewImpl(new SystemWebViewEngine(new webview.WebviewController()));
private context = getContext(this) as common.UIAbilityContext
private prePushMessageId: number = 0 // 避免重复推送发送
// 显示开屏页
@State showSplash: boolean = true
onPageShow(): void {
// 通知当前页面下的所有CordovaWeb容器页面显示
this.listeners.forEach(it => it.onPageShow && it.onPageShow())
this.context.eventHub.on('OnOpenNotification', (pushExtData: string) => {
this.onOpenNotification(pushExtData)
} )
this.context.eventHub.on('OnReceiveMessage', (pushExtData: string) => {
this.onReceiveMessage(pushExtData)
} )
}
}
1.还是想用事件总线的话可以试一下Emitter
2.或者调用的时候传参数,或者终止UIAbility的时候传返回结果,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/uiability-intra-device-interaction-V5\#启动应用内的uiability
3.使用AppStorage/LocalStorage进行数据同步,参考文档: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/uiability-data-sync-with-ui-V5\#使用appstoragelocalstorage进行数据同步
总的解决思路参考一下这篇帖子:https://developer.huawei.com/consumer/cn/forum/topic/0204141303961614256?fid=0109140870620153026