公共事件实现跨进程通信

公共事件实现跨进程通信

HarmonyOS
2024-05-20 21:28:03
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
失望的满天星

场景:想要实现跨进程通信,需要使用公共事件,发布+订阅。

核心代码解释

首先要实现多进程,这里选择了InputMethodExtensionAbility输入法应用,通过输入法应用发布公共事件,再通过点击事件实现订阅公共事件,来实现跨进程通信。

因为是自定义的输入法,所以需要使用hdc shell aa start ability -a InputMethod -b cn.openharmony.inputmethodchoosedialog来进行输入法的切换。

核心代码如下:

​public onCreate(context: InputMethodExtensionContext): void { 
  this.mContext = context; 
  this.initWindow(); // 初始化窗口 
  this.registerListener(); // 注册对输入法框架的事件监听 
  let options: commonEventManager.CommonEventPublishData = { 
    code: 1, // 公共事件的初始代码 
    data: "initial data", // 公共事件的初始数据 
  } 
  // 发布公共事件 
  commonEventManager.publish("selfPublishEvent", options, (err: Base.BusinessError) => { 
     if (err) { 
        console.error('[CommonEvent] PublishCallBack err=' + JSON.stringify(err)); 
     } else { 
      console.info('[CommonEvent] Publish success') 
     } 
     console.info('******') 
  }); 
}
//Index.ets 
import { BusinessError, commonEventManager } from '@kit.BasicServicesKit'; 
 
let subscribeInfo: commonEventManager.CommonEventSubscribeInfo = { 
  events: ["selfPublishEvent"], // 订阅公共事件 
  priority: 1000 
} 
commonEventManager.createSubscriber(subscribeInfo, (err: BusinessError, data: commonEventManager.CommonEventSubscriber) => { 
  if (err) { 
    console.error(`Failed to create subscriber. Code is ${err.code}, message is ${err.message}`); 
    return; 
  } 
  console.info('Succeeded in creating subscriber.'); 
  subscriber = data; 
  if (subscriber !== null) { 
    commonEventManager.subscribe(subscriber, (err: Base.BusinessError, data: commonEventManager.CommonEventData) => { 
      console.log(`avoidAreaChange: ${JSON.stringify(data)}` + "12522222") 
      if (err) { 
        console.error(`Failed to subscribe common event. Code is ${err.code}, message is ${err.message}`); 
        return; 
      } 
      else { 
        console.info("Succeeded in creating subscriber1") 
      } 
    }) 
  } else { 
    console.error(`Need create subscriber`); 
  } 
  // 订阅公共事件回调 
})

实现效果

适配的版本信息

IDE:DevEco Studio 4.1.3.500

SDK:HarmoneyOS 4.0.10.16

分享
微博
QQ
微信
回复
2024-05-21 17:21:34
相关问题
公共事件有哪些简单使用
468浏览 • 1回复 待解决
用户订阅系统公共事件
528浏览 • 1回复 待解决
如何把公共事件发布给其他设备
3136浏览 • 1回复 待解决
公共事件的生命周期是怎样的
572浏览 • 1回复 待解决
如何跨进程调用其他应用的服务
582浏览 • 1回复 待解决
js Fa如何实现线程间通信
4214浏览 • 1回复 待解决
鸿蒙音视频通信系统如何实现
3528浏览 • 1回复 待解决
应用如何实现进程保活和唤醒?
756浏览 • 1回复 待解决
liteos-m怎么实现进程间的互斥?
4694浏览 • 1回复 已解决
java怎么读取公共目录下的文件?
1174浏览 • 1回复 待解决