HarmonyOS commonEventManager注册事件接收问题接口问题

1、commonEventManager公共事件监听,在aboutToAppear和onPageShow注册监听,收不到监听事件。

2、通过点击测试button进行注册,可以收到监听事件。

HarmonyOS
2024-12-26 08:15:59
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

看描述大概率是subscriber生命周期问题,检查一下subscriber是否使用全局变量。设置订阅回调函数后,订阅回调函数会在接收到事件时触发,具体可参考文档:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/common-event-subscription-V5

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-commoneventmanager-V5

请参考demo:

import { BusinessError, commonEventManager } from '@kit.BasicServicesKit';
import { promptAction } from '@kit.ArkUI';
import { hilog } from '@kit.PerformanceAnalysisKit';
const TAG: string = 'ProcessModel';
const DOMAIN_NUMBER: number = 0xFF00;

@Entry
@Component
struct IndexA {

  @State nativeReceive: string = 'native receive message';
  // 用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作
  subscriber: commonEventManager.CommonEventSubscriber | null = null;
  // 订阅者信息,其中的event字段需要替换为实际的事件名称。
  subscribeInfo: commonEventManager.CommonEventSubscribeInfo = {
    events: ['event'], // 订阅灭屏公共事件
  };

  // 公共事件相关信息
  options: commonEventManager.CommonEventPublishData = {
    code: 1, // 公共事件的初始代码
    data: 'initial data', // 公共事件的初始数据
  };

  aboutToAppear(): void {
    this.receiveMessageFromH5();
  }

  receiveMessageFromH5() {
    // 创建订阅者回调
    commonEventManager.createSubscriber(this.subscribeInfo, (err: BusinessError, data: commonEventManager.CommonEventSubscriber) => {
      if (err) {
        hilog.error(DOMAIN_NUMBER, TAG, `Failed to create subscriber. Code is ${err.code}, message is ${err.message}`);
        return;
      }
      hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in creating subscriber.');
      this.subscriber = data;

      // 订阅公共事件回调
      if (this.subscriber !== null) {
        commonEventManager.subscribe(this.subscriber, (err: BusinessError, data: commonEventManager.CommonEventData) => {
          if (err) {
            this.nativeReceive = JSON.stringify(err);
            hilog.error(DOMAIN_NUMBER, TAG, `Failed to subscribe common event. Code is ${err.code}, message is ${err.message}`);
            return;
          }
          this.nativeReceive = JSON.stringify(data);
          console.info(`receiveMessageFromH5 data = ${JSON.stringify(data)}`);
        })
      } else {
        hilog.error(DOMAIN_NUMBER, TAG, `Need create subscriber`);
      }
    })
  }

  sendMessageToH5() {
    // 发布公共事件,其中的event字段需要替换为实际的事件名称。
    commonEventManager.publish('event', this.options, (err: BusinessError) => {
      if (err) {
        hilog.error(DOMAIN_NUMBER, TAG, 'PublishCallBack err = ' + JSON.stringify(err));
      } else {
        hilog.info(DOMAIN_NUMBER, TAG, 'Publish success');
      }
    });
  }

  build() {
    Row() {
      Column() {
        Text(this.nativeReceive)
          .margin(5)
        Button("sendMessageToH5")
          .margin(5)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            this.sendMessageToH5();
          })
      }
      .width("100%")
    }
    .alignItems(VerticalAlign.Top)
    .height("100%")
  }
}
分享
微博
QQ
微信
回复
2024-12-26 10:39:55
相关问题
HarmonyOS 移动上XComponent注册问题
665浏览 • 1回复 待解决
HarmonyOS 无法接收事件
380浏览 • 1回复 待解决
HarmonyOS socket接收文件问题
296浏览 • 1回复 待解决
鸿蒙js开发登录注册问题
6211浏览 • 2回复 待解决
HarmonyOS 接口声明问题
222浏览 • 1回复 待解决
HarmonyOS 事件穿透问题
710浏览 • 1回复 待解决
HarmonyOS commonEventManager 使用方案
305浏览 • 1回复 待解决
openHarmony 注册服务中的语法问题
7398浏览 • 1回复 待解决
HarmonyOS eventHub注册和移除事件监听
300浏览 • 1回复 待解决
HarmonyOS 接收不到eventhub事件
144浏览 • 1回复 待解决
HarmonyOS 事件独占控制问题
559浏览 • 1回复 待解决
HarmonyOS 事件通知问题咨询
84浏览 • 1回复 待解决
HarmonyOS 事件订阅 emitter问题
808浏览 • 1回复 待解决
HarmonyOS class实现接口问题
165浏览 • 1回复 待解决
HarmonyOS detectBarcode接口能力问题
167浏览 • 1回复 待解决
HarmonyOS 曝光事件问题咨询
97浏览 • 1回复 待解决
HarmonyOS 点击事件监听问题
232浏览 • 1回复 待解决
HarmonyOS 手势事件上报问题
411浏览 • 1回复 待解决
HarmonyOS 键盘事件监听问题
909浏览 • 1回复 待解决
HarmonyOS 点击事件判定问题
215浏览 • 1回复 待解决