HarmonyOS 5.0应用开发——全局广播的使用

【高心星出品】

全局广播的使用

全局广播可以用来做应用间通信,进程间通信,包含订阅、发布等功能。

公共事件

CES(Common Event Service,公共事件服务)为应用程序提供订阅、发布、退订公共事件的能力。

公共事件从系统角度可分为:系统公共事件和自定义公共事件。

  • 系统公共事件:CES内部定义的公共事件,当前仅支持系统应用和系统服务发布,例如HAP安装、更新、卸载等公共事件。目前支持的系统公共事件请参见系统公共事件列表。
  • 自定义公共事件:应用定义的公共事件,可用于实现跨进程的事件通信能力。
接受系统公共事件原理

每个应用都可以按需订阅公共事件,订阅成功,当公共事件发布时,系统会将其发送给对应的应用。这些公共事件可能来自系统、其他应用和应用自身。

在这里插入图片描述

发布与订阅自定义公共事件

案例功能:在Index页面订阅自定义公共事件,Index页面跳转到other页面,other页面发布全局广播,Index页面订阅者接受广播事件并弹窗显示数据。

在这里插入图片描述

Index页面代码

import { commonEventManager } from '@kit.BasicServicesKit';
import { promptAction, router } from '@kit.ArkUI';

@Entry
@Component
struct Index {
  @State message: string = '';
  // 创建订阅对象
  aboutToAppear(): void {
    let  info = commonEventManager.createSubscriberSync({ events: ['event_01']})
    // 订阅广播
    commonEventManager.subscribe(info,(err,data)=>{
      if(err)
      {
        console.error('gxxt 订阅信息错误: ',err.message)
        return
      }
      // 接收发来的信息并弹窗显示
      AlertDialog.show({message:'这是Index页面广播接受的信息: '+data.data,confirm:{value:'确定',action:()=>{}}})
    })
  }
  build() {
    Column() {
      Text('Index页面')
        .fontSize(30)
        .fontWeight(FontWeight.Bolder)
        .margin(20)
      Button('跳转')
        .width('60%')
        .onClick(() => {
          router.pushUrl({url:'pages/other'})
        })
        .margin(20)


    }
    .height('100%')
    .width('100%')
  }
  aboutToDisappear(): void {
   //  解除订阅广播
   // commonEventManager.unsubscribe(this.info)
  }
}

other页面代码

import { commonEventManager } from '@kit.BasicServicesKit';

@Entry
@Component
struct Other {
  @State message: string = 'Hello World';

  build() {
    Column(){
      Button('发布广播')
        .width('60%')
        .onClick(()=>{
          // 发送广播,携带数据
          commonEventManager.publish('event_01',{data:'我来自other页面的数据'},(err)=>{
           if(err){
             console.error('gxxt 广播发送错误: '+err.message)
           }
           console.log('gxxt 广播放松成功!')
          })
        })
    }
    .height('100%')
    .width('100%')
    .justifyContent(FlexAlign.Center)
  }
}
订阅系统事件

案例功能:在页面订阅飞行模式转变的系统事件,如果接受到该事件,就将该事件的数据显示在文本框中。

在这里插入图片描述

Eventpage页面代码

import { commonEventManager } from '@kit.BasicServicesKit';

@Entry
@Component
struct Eventpage {
  @State message: string = '手机状态: ';

  aboutToAppear(): void {
    // 飞行模式转变的事件
    let info = commonEventManager.createSubscriberSync({
      events: [commonEventManager.Support.COMMON_EVENT_AIRPLANE_MODE_CHANGED]
    })
    commonEventManager.subscribe(info, (err, data) => {
      if (err) {
        console.error('gxxt 订阅飞行模式转变广播失败!')
        return
      }
      this.message = '手机状态: ' + data.data
    })
  }

  build() {
    Column() {
      Text(this.message).fontSize(30).fontWeight(FontWeight.Bolder).border({ width: 3, color: Color.Red })
    }
    .height('100%')
    .width('100%')
    .justifyContent(FlexAlign.Center)
  }
}
ght.Bolder).border({ width: 3, color: Color.Red })
    }
    .height('100%')
    .width('100%')
    .justifyContent(FlexAlign.Center)
  }
}
### 集成腾讯IM SDK到鸿蒙系统的即时通讯应用 #### 准备工作 为了成功集成腾讯IM SDK并实现在鸿蒙系统上的即时通讯功能,开发者需满足如下前提条件: - 安装 DevEco Studio NEXT Developer Beta1(5.0.3.300)或更高版本; - 使用 HarmonyOS SDK API 12 或更新版本; - 获取有效的腾讯即时通讯 IM 开发者账号以及对应的AppKey[^1]。 #### 环境配置与SDK引入 完成上述准备工作之后,下一步是在项目中正确设置开发环境,并按照官方指南导入所需的腾讯IM SDK包。这通常涉及修改项目的`build.gradle`文件来指定依赖项的位置和版本号。对于具体的操作步骤,请参照腾讯提供的最新文档说明进行相应调整。 #### 初始化SDK及基础组件定义 当SDK被顺利加入工程后,则可以开始编写代码来进行必要的初始化处理。此过程主要包括实例化核心类如 `TIMManager` 来管理整个IM服务的状态变化,同时还需要注册全局事件监听器以便接收来自服务器的通知消息等重要信息[^2]。 ```java // 创建一个用于访问IM功能的对象 private TIMManager mTimManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 实例化TIMManager单例模式下的对象 mTimManager = TIMManager.getInstance(); } ``` #### 用户认证流程 紧接着就是执行用户的鉴权操作——即通过调用API接口向远程服务器验证当前设备上运行的应用程序是否有权限使用该IM服务。一般情况下,这里需要用到之前申请得到的AppKey参数作为身份标识的一部分传递给后台校验逻辑。 ```java mTimManager.login(account, password, new TIMCallBack() { @Override public void onError(int code, String desc) { Log.e("Login Error", "Code: " + code + ", Description:" + desc); } @Override public void onSuccess() { Log.d("Login Success", "User logged in successfully."); } }); ``` #### 发送与接收消息 一旦完成了前面提到的各项准备工作,在实际应用场景里就可以利用已有的会话机制轻松实现一对一聊天的功能了。此时可以通过构建特定类型的`TIMMessage`实体并将之提交至目标对话框内完成数据传输的任务;与此同时也要记得为应用程序添加相应的广播接收器用来捕获新到来的信息通知。 ```java // 构建一条简单的文本消息 TIMMessage msg = new TIMMessage(); msg.addElement(new TIMTextElem().setText("Hello World")); // 将消息发送出去 conversation.sendMessage(msg, null); // 设置消息监听器以响应收到的新消息 mTimManager.addMessageListener(new TIMMessageListener(){ ... }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值