HarmonyOS 两个UIAbility 如何传值?

我有 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)
    } )
  }
}
阅读 539
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进