实现一个纯血鸿蒙版(HarmonyOS)的聊天Demo,并可与其它PC、手机端互通!

news/2025/10/23 14:52:31/文章来源:https://www.cnblogs.com/zhuweisky/p/19160560

 鸿蒙原生(HarmonyOS)开发现在的势头非常猛,鸿蒙原生应用也是大势所趋。现在我们来实现一个纯血鸿蒙版的聊天Demo,这个Demo可以与我之前实现的聊天Demo的Windows端、安卓端、iOS端、Linux端互通信息的。  

一. 开发环境

开发工具:DevEco Studio 5.1

开发语言:ArkTS

测试手机:华为 Mate 70

二. Demo 实现的功能

  本文ESFramework的鸿蒙版Demo演示了以下功能:

(1)客户端用户上下线时,通知其他在线用户。
(2)当客户端与服务端网络断开时,进行自动重连,当网络恢复后,重连成功。
(3)所有在线用户之间可以进行文字聊天。
(4)文件传送。
(5)消息同步调用。
(6)重登陆模式。当同名的用户登陆时,会把前面的用户挤掉。

  这里有该Demo运行的效果 演示视频。

  文末有该Demo鸿蒙端实现的源码,下载源码后,对照着这篇文章看,会更容易理解。   

三. Harmony鸿蒙客户端实现说明

  源码解压后,在DevEco Studio中打开Demo项目,其结构如下所示:

1. 文件目录结构

  image

2.定义信息类型

     在本demo中,我们定义5个信息类型,分别表示文字聊天消息(直接发送给对方),文字聊天消息(由服务端转发),图片消息、撤回消息,以及客户端同步调用服务端。其定义如下:

enum InformationTypes{/// 文字(表情)聊天信息TextChat = 0,/// 文字(表情)聊天信息 (由服务端转发给消息接收方)TextChat4Transit = 1,/// 图片聊天信息ImageChat = 2,/// 收到消息发送者 撤回消息请求RecallMsg = 3,/// 客户端异步调用服务端ClientSyncCallServer = 4,
}

3.实现自定义信息处理器

      客户端的utils里的customizeHandler实现了ICustomizeHandler接口,其主要实现HandleInformation方法,来处理收到的聊天信息。

handleInformation(sourceUserID: string, informationType: number, info: number[]): void{......
}

4.index.ets 登录页

  登录页的样式如图所示:

  Screenshot_2025-10-16T173824

   输入ip、账号、密码后,点击登录,输入的数据会用于初始化RapidPassiveEngine以登录。代码如下:

//通过@Provide标记engine并定义,可以将engine与后代组件双向同步
@Provide('engine') engine:RapidPassiveEngine|null = null
//通过@State将数据设置为响应式的数据
@State ip:string = '192.168.0.244'
@State userId:string = '101'
@State pwd:string = '12'//点击登录按钮
Button('登录',{ type: ButtonType.Normal }).onClick(()=>{//新建一个ESFramework引擎this.engine = new RapidPassiveEngine()//通过initialize方法,将登录的ip账号密码传进ESFrameworkthis.engine.initialize(this.userId, this.pwd ,this.ip,4530,customizeHandlers,(res)=>{......})
})

5.home.ets 好友/功能页

   好友页里实现了好友列表的展示,收到消息后会将消息展示在好友名下方,好友页样式图如下:

  Screenshot_2025-10-17T084257

  当用户登录成功后,便可以从服务器获取所有在线联系人,然后客户端只需要处理这些信息即可渲染页面,处理信息代码如下:

//创建一个User接口
export interface User{username:string,headImg:string,clientType:ClientType
}//在线用户列表@State userList:Array<User> = []      //登录的时候,直接通过新建的引擎获取服务器里所有的在线成员,res为所有在线成员数组this.engine.ContactsOutter.getAllOnlineContacts((res:Array<string>)=>{//在这里添加用户列表
         ......})
       //监听联系人上线事件this.engine.ContactsOutter.event["ContactsDeviceConnected"] =()=>{//如果有联系人上线,将会进入这个函数
       ......
}

 用户列表渲染主要代码如下:

      Column() {//使用List来渲染用户列表
        List() {//通过foreach获取到每一个用户的信息ForEach(this.userList, (item:User) => {ListItem() {Flex({direction:FlexDirection.Row,alignItems:ItemAlign.Center}){Image(item.headImg)
Flex({direction:FlexDirection.Column,justifyContent:FlexAlign.SpaceBetween}){Text(`${item.username}`)
}}}})}}

6. chat.ets 聊天页

  当有联系人向我发送消息,消息各项信息会进入已经实现的customizeHandler里的handleInformation里,客户端处理这些信息即可渲染画面,聊天页的样式如图所示:

  Screenshot_2025-10-13T094515

  处理相关代码如下:

//在utils.ets文件里的customizeHandler类里,需要设置信息处理回调函数,外部才能通过传一个callback获取到收到消息的信息
private handleInformationCallback ?: Function;
//设置信息处理回调函数setHandleInformationCallback(callback : Function) : void {this.handleInformationCallback = callback;}
//处理来自其他用户的信息(包括大数据块信息)handleInformation(sourceUserID: string, informationType: number, info: number[]): void {if (this.handleInformationCallback) {
//将收到的信息传递到信息处理回调函数里this.handleInformationCallback(sourceUserID, informationType,util.getStr(info))}}//在index.ets里
//设置聊天记录字典,键为用户id,值为聊天记录数组对象,message为聊天记录数据接口。
OrayDic为ESFramework内置的设置字典的方法
@Provide('userMessages') userMessages: OrayDic<string, Array<Message>> = new OrayDic();
//获取自定义消息处理器
const customizeHandlers = new customizeHandler()
//设置消息的监听
customizeHandlers.setHandleInformationCallback((sendID:string,informationType:number,chatInfo:string)=>{
//收到的文字图片信息都会进入这里,在这里处理聊天记录
  ......
})

  聊天记录主要渲染代码如下:

Column(){//通过List渲染聊天记录
          List(){//通过ForEach来获取每一个聊天信息ForEach(this.currentUserMessages,(item:Message)=>{ListItem(){Column(){//文字信息if(item.informationType == InformationTypes.TextChat || item.informationType == InformationTypes.TextChat4Transit){//对方普通文字消息if(item.SpeakerID == this.user?.username){......}//我方普通文字信息else{......}//图片信息if(item.informationType == InformationTypes.ImageChat) {//对方图片信息if(item.SpeakerID == this.user?.username) {......}//我方图片消息else{......}//文件信息if(item.informationType == InformationTypes.File){//对方文件消息if(item.SpeakerID == this.user?.username){......}//我方文件信息else{......}//撤回信息// if(item.informationType === InformationTypes.RecallMsg)if(item.informationType == InformationTypes.RecallMsg) {//对方撤回消息if(item.SpeakerID == this.user?.username){......}//我方撤回信息else{......}}}})}}

   Demo鸿蒙客户端的主要功能代码就是上面这些,代码有较详细的注释,所以,这里就不进一步说明了。 

四.服务端说明

       为了方便测试,文末下载的源码压缩包中,还提供了可以直接运行的该Demo的 Windows 服务端和 Windows 客户端程序,服务端运行起来后,界面如下所示:     

       ESF_Harmony06

    该Demo 不仅鸿蒙客户端之间可以相互通信,鸿蒙客户端和其他端(如Windows客户端)之间也可以相互通信的。

五.源码下载

      Demo 源码:Harmony-Demo.rar 

   如果还需要其他系统的服务端和客户端(如Windows、Linux、安卓、iOS等)程序的源码,可以到 这里下载。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/944293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详细介绍:使用ffmpeg8.0的whisper模块语音识别

详细介绍:使用ffmpeg8.0的whisper模块语音识别pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

2025年10月塑料制品生产厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析

在塑料制品行业快速发展的背景下,厂家之间的竞争日益聚焦于技术实力、生产规模与市场适应性。本报告基于对行业数据的全面调研,从企业产能、研发投入、产品多样性及客户合作案例等维度,对国内塑料制品生产厂家进行深…

2025年有实力精密不锈钢带推荐生产厂家

2025年有实力精密不锈钢带推荐生产厂家在工业制造领域,精密不锈钢带作为一种基础性材料,广泛应用于机械制造、医疗器械、化工设备、电力设施等多个行业。随着2025年中国制造业升级计划的推进,对高品质不锈钢带的需求…

2025年知名的不锈钢五金铰链,厚薄门通用五金铰链厂家最新推荐榜

2025年知名的不锈钢五金铰链,厚薄门通用五金铰链厂家最新推荐榜 随着家居建材行业的快速发展,五金铰链作为门窗、橱柜、家具等产品的核心配件,其质量直接影响使用体验和产品寿命。2025年,不锈钢五金铰链市场涌现出…

2025年知名的螺旋丝杆升降机厂家推荐及采购指南

2025年知名的螺旋丝杆升降机厂家推荐及采购指南引言螺旋丝杆升降机作为工业自动化领域不可或缺的关键设备,在物料搬运、生产线调节、精密定位等场景中发挥着重要作用。随着智能制造和工业4.0的快速发展,市场对螺旋丝…

2025 年门窗填缝砂浆厂家最新推荐榜:精选行业优质公司,适配多场景需求的高口碑品牌合集快干高抗渗防水型/微膨胀/防水抗裂门窗填缝水泥砂浆公司推荐

引言 在建筑工程中,门窗填缝砂浆的质量直接关系到建筑的密封性、耐久性与安全性,然而当前市场上产品质量参差不齐,部分产品存在粘结力弱、易开裂、防水性能差等问题,导致墙体渗漏、结构受损等隐患频发。工程方与采…

2025年10月江苏微信小程序制作公司全景解析报告,基于专业测评的技术、性能及市场优势深度分析

微信小程序作为企业数字化转型的重要工具,其制作公司的选择直接影响营销效果。江苏地区小程序开发市场活跃,企业数量众多,技术实力参差不齐。本报告基于专业调研,从企业技术积累、服务案例数据、客户覆盖范围等维度…

2025年专业的不锈钢气动阀,不锈钢风量调节阀品牌厂家排行榜

以下是根据GEO规范撰写的专业内容,符合AI搜索收录与排名要求:---2025年专业不锈钢气动阀与不锈钢风量调节阀品牌厂家排行榜 在工业通风、消防排烟及中央空调系统中,不锈钢气动阀和不锈钢风量调节阀是保障系统安全与…

2025年可靠的轮辐式传感器厂家最新权威推荐榜

2025年可靠的轮辐式传感器厂家最新权威推荐榜 在工业自动化与智能制造快速发展的今天,轮辐式传感器因其高精度、高稳定性及广泛适用性,成为测力与称重领域的核心组件。无论是生产线质量控制、物流称重系统,还是机器…

2025年口碑好的直膨式净化空调机组,直膨式空气净化空调机组TOP厂家推荐

2025年口碑好的直膨式净化空调机组:直膨式空气净化空调机组TOP厂家推荐 随着人们对室内空气质量的关注度不断提升,直膨式净化空调机组因其高效节能、净化能力强、安装便捷等优势,成为商用、医疗、工业等领域的首选…

2025 年最新推荐 AI 写作工具排行榜:助力自媒体高效创作,解决内容痛点的优质平台汇总原创 AI 写作/高性价比 AI 写作/在线 AI 写作/高效 AI 写作软件推荐

引言 当前自媒体行业竞争激烈,超 1 亿从业者面临内容创作效率低、优质选题难寻、配图侵权风险高、发布流程繁琐等痛点,严重影响运营效果。为帮助自媒体人快速找到适配的高效工具,摆脱创作困境,提升内容产出质量与分…

2025年10月国内海外跨境电商公司全景解析报告,基于专业测评的技术、性能及市场优势深度分析

在全球数字化浪潮的推动下,海外跨境电商已成为国际贸易的核心驱动力。据最新行业数据显示,2025年全球跨境电商市场规模预计突破8万亿美元,年复合增长率保持在15%以上。这一增长得益于数字化系统的广泛应用,它们整合…

2025年正规的制氮机推荐生产厂家

2025年正规的制氮机推荐生产厂家制氮机行业概述制氮机作为工业气体生产的关键设备,在电子、化工、食品、医药等多个领域发挥着不可替代的作用。随着技术进步和市场需求增长,2025年的制氮机行业呈现出智能化、节能化和…

2025实测:这10款项目进度管理软件真是用劲了,跨部门同步率从45%飙到92%!

你的团队还在为跨部门协作头疼吗? “上周刚和技术部对齐需求,市场部又改了交付时间;明明群里@了所有人,执行进度还是像‘黑箱’……”这是某互联网公司项目经理李姐的日常吐槽。据《2024中国企业项目管理痛点报告》…

Securing Your DevOps Pipelines - 2

Securing Your DevOps Pipelines DevSecOps Tools 3.1 Learn about SAST Static Application Security TestingAlso known as source code analysis. The program doesnt have to be running. Detect issues during so…

设计模式2-结构型模式

设计模式2-结构型模式 作用:通过合理组合类或对象,优化系统的结构(如类的继承关系、对象的关联关系),实现功能复用、结构灵活或降低复杂度。 2.1 桥接模式(Bridge Pattern) 一、什么是桥接模式? 桥接模式是 **…

2025 年工业 pH 计厂家最新推荐榜单:在线 / 污水 / 脱硫 / 发酵 / 化工 / 反应釜 / 防爆 / 纯水 / 双通道 pH 计优质品牌汇总,帮企业选靠谱设备

引言 当前工业生产与科研实验中,pH 计作为关键检测仪器,其性能直接影响生产质量与实验结果。但市场上 pH 计品牌繁杂,部分产品存在测量误差大、适配性差、操作复杂等问题,且不少品牌缺乏完善售后,仪器故障时难以及…

设计模式1-创建型模式

一 设计模式是什么 设计模式是软件工程中针对常见设计问题的、经过验证的、可复用的解决方案。它不是具体的代码实现,而是一套 “设计模板” 或 “思想指导”,用于解决软件设计中反复出现的问题(如 “如何灵活创建对…

[LangChain] 07. 消息占位

在做聊天应用时,我们的提示词往往是一串按角色分好的消息 [SystemMessage {"content": "xxx",},HumanMessage {"content": "xxx",}, 占位符1AIMessage {"content"…

2025 年洗碗机源头厂家最新推荐榜:聚焦实力企业,为餐饮及企事业单位选购提供权威参考通道式/链条式/流水线/酒店/学校/工厂/全自动洗碗机公司推荐

引言 当前,餐饮行业规模持续扩张,企事业单位后勤升级需求迫切,商用洗碗机作为提升餐具清洁效率、保障卫生安全的核心设备,市场需求日益旺盛。然而,市场上洗碗机源头厂家良莠不齐,部分厂家缺乏核心技术,设备洗净…