鸿蒙开发融云demo发送文本消息

news2024/12/27 11:42:49
鸿蒙开发融云demo发送文本消息

融云鸿蒙版是不带UI的,得自己一步步搭建。
这次说如何发送文本消息,并且显示文本消息

一、思路

发送用:IMEngine.getInstance().sendMessage
显示文本:

Text(ImUtils.dealMyTextContent(this.msg.content as TextMessage))
                    .lineHeight($r('app.integer.search_text_height'))
                    .constraintSize({ minHeight: $r('app.integer.opt_layout_chat_view_profile_picture_height') })
                    .fontSize($r('app.integer.search_font_size'))
                    .backgroundColor($r('app.color.color_D0E9F3'))
                    .fontColor($r('app.color.color_182431'))
                    .padding({
                      top: $r('app.integer.layout_8'),
                      left: $r('app.integer.text_font_13'),
                      bottom: $r('app.integer.layout_8'),
                      right: $r('app.integer.text_font_13')
                    })
                    .borderRadius({
                      topLeft: $r('app.integer.opt_layout_chat_view_item_padding_right'),
                      topRight: $r('app.integer.layout_4'),
                      bottomLeft: $r('app.integer.opt_layout_chat_view_item_padding_right'),
                      bottomRight: $r('app.integer.opt_layout_chat_view_item_padding_right')
                    })
二、效果图:

在这里插入图片描述
在这里插入图片描述

三、关键代码:

发送文本消息的封装:

public static sendTextMessage(targetId: string, text: string,extra:string = '', successCallBack?:()=>void) {
    let conId = new ConversationIdentifier();
    conId.conversationType = ConversationType.Private;
    conId.targetId = targetId;

    let textMsg = new TextMessage();
    textMsg.content = text;
    if (isNotEmptyString(extra)) {
      textMsg.extra = extra
    }

    let msgSrc = new Message(conId, textMsg);
    let option: ISendMsgOption = {};
    let msgAfter: Message = msgSrc
    IMEngine.getInstance()
      .sendMessage(msgSrc, option, (msg: Message) => {
        // 消息入库
        msgAfter = msg
        msgAfter.sentStatus = SentStatus.Sending
        EventKeys.postEvent(EventKeys.ReceivedImMessageEvents,ReceivedImMessageEvent(msgAfter))
      })
      .then(result => {
        if (EngineError.Success !== result.code) {
          // 发送消息失败
          msgAfter.sentStatus = SentStatus.Failed
          EventKeys.postEvent(EventKeys.ReceivedImMessageEvents,ReceivedImMessageEvent(msgAfter))
          // 刷新会话列表,不打算自己插入会话
          EventKeys.postEvent(EventKeys.RefreshMsgListEvents)
          return;
        }
        if (!result.data) {
          // 消息数据为空
          // 成功的状态,但是理论上不会出现发送消息成功,但是消息体为空的情况,暂时不处理,避免发送多次通知
          // msgAfter.sentStatus = SentStatus.Sent
          // emitter.emit(EventKeys.RECEIVED_IM_MESSAGE_EVENT, ReceivedImMessageEvent(msgAfter))
          return;
        }
        let msg = result.data as Message;
        EventKeys.postEvent(EventKeys.ReceivedImMessageEvents,ReceivedImMessageEvent(msg))
        // 刷新会话列表,不打算自己插入会话
        EventKeys.postEvent(EventKeys.RefreshMsgListEvents)
        successCallBack?.()
      })

  }

显示文本:

// 聊天页面本人消息
          Row() {
            Image(MMKVUtil.getCurrentUserBean().headImg?.smallHeadImg)
              .width($r('app.integer.opt_layout_chat_view_profile_picture_height'))
              .height($r('app.integer.opt_layout_chat_view_profile_picture_height'))
              .alt($r('app.media.ic_default'))
              .borderRadius($r('app.integer.opt_layout_chat_view_profile_picture_radius'))
              .onClick(()=>{
                // 看我自己的详情
              })
            Column() {
              if (this.msg.objectName === TextMessageObjectName) {
                  Text(ImUtils.dealMyTextContent(this.msg.content as TextMessage))
                    .lineHeight($r('app.integer.search_text_height'))
                    .constraintSize({ minHeight: $r('app.integer.opt_layout_chat_view_profile_picture_height') })
                    .fontSize($r('app.integer.search_font_size'))
                    .backgroundColor($r('app.color.color_D0E9F3'))
                    .fontColor($r('app.color.color_182431'))
                    .padding({
                      top: $r('app.integer.layout_8'),
                      left: $r('app.integer.text_font_13'),
                      bottom: $r('app.integer.layout_8'),
                      right: $r('app.integer.text_font_13')
                    })
                    .borderRadius({
                      topLeft: $r('app.integer.opt_layout_chat_view_item_padding_right'),
                      topRight: $r('app.integer.layout_4'),
                      bottomLeft: $r('app.integer.opt_layout_chat_view_item_padding_right'),
                      bottomRight: $r('app.integer.opt_layout_chat_view_item_padding_right')
                    })
              }
四、鸿蒙融云Demo源码结构图:

在这里插入图片描述
有问题或者需要完整源码的私信我

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

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

相关文章

Linux:磁盘深潜:探索文件系统、连接之道与库的奥秘

✨✨✨学习的道路很枯燥,希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一 磁盘 1.1 磁盘的物理结构 1.2 磁盘的存储结构 1.3 磁盘的逻辑结构 ​编辑二 文件系统 2.1 简单了解 2.2 inode 2.3 文件描述符,进程与文件系统的关系 ​编辑2…

格姗知识圈博客网站开源了!

格姗知识圈博客 一个基于 Spring Boot、Spring Security、Vue3、Element Plus 的前后端分离的博客网站!本项目基本上是小格子一个人开发,由于工作和个人能力原因,部分技术都是边学习边开发,特别是前端(工作中是后端开…

模型选择拟合

1.通过多项式拟合交互探索概念 import math import numpy as np import torch from torch import nn from d2l import torch as d2l 2.使用三阶多项式来生成训练和测试数据的标签 max_degree 20 # 多项式的最大阶数 n_train, n_test 100, 100 # 训练和测试数据集大小 true…

SQL Server 当前日期及其未来三天的日期

当前日期及其未来三天的日期,并分别以 YYYY-MM-DD 和 yyyyMMdd 的格式展示 1、当前日期及其未来三天的日期,以 YYYY-MM-DD的格式展示 WITH CurrentDate AS (SELECT GETDATE() AS 当前日期 ) -- 使用 CONVERT 函数 SELECTCONVERT(VARCHAR(10), 当前日期,…

【论文笔记】MLSLT: Towards Multilingual Sign Language Translation

🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: MLSLT: Towards Multiling…

springboot医疗物品采购系统-计算机设计毕业源码10210

摘 要 本文基于Spring Boot框架,设计并实现了一个医疗物品采购系统。该系统旨在解决医疗物品采购中的管理和信息化问题,提供便捷的服务和支持。通过系统的设计与实现,实现了医疗物品的供应商家管理、物品类型管理、物品仓库管理、采购计划管…

小渡Ai论文写作:文献综述黑科技LitMaps30s找到所有文献

✨Litmaps 究竟是什么呢? Litmaps 是一款极为强大的文献搜索与追踪工具! 它不但能够助力你找到相关的研究文献,还能够依据你提供的文献生成一张学术地图,清晰地展现文献之间的引用链以及研究发展趋势。 恰似一张璀璨的星空图&a…

Linux中安装配置SQLite3,并实现C语言与SQLite3的交互。

前言 SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。本次实验介绍在Linux上实现C语言和SQLite3的交互,利用C语言编写相关语句,连接数据库、操作数…

python实战(三)——文本向量化/文本表示

一、概念 文本向量化是自然语言处理领域的重要环节,也是现在大语言模型开发重要基础。计算机程序无法理解文字信息(实际上非数值类型的信息都无法理解),因此我们需要将文字信息转换成计算机程序可理解的数值类型。通俗来说就是我们…

Python 精品学习资料收藏下载,Python 字符串处理备忘单

重点在这: (请移步图中作者处,获取高清大图下载链接) Python 中的字符串(String)是一种用于表示文本的数据类型。字符串是不可变的,这意味着一旦创建,你不能改变字符串中的字符&am…

【学习AI-相关路程-mnist手写数字分类-python-硬件:jetson orin NX-自我学习AI-基础知识铺垫-遇到问题(1) 】

【学习AI-相关路程-mnist手写数字分类-python-硬件:jetson orin NX-自我学习AI-基础知识铺垫-遇到问题(1) 】 1、前言2、先行了解(1)学习基础知识-了解jetson orin nx 设备(2)学习python&AI…

ClickHouse在百度MEG数据中台的落地和优化

导读 百度MEG上一代大数据产品存在平台分散、质量不均和易用性差等问题,导致开发效率低下、学习成本高,业务需求响应迟缓。为了解决这些问题,百度MEG内部开发了图灵3.0生态系统,包括Turing Data Engine(TDE)计算引擎、Turing Dat…

从0到1,搭建vue3项目

一 Vite创建Vue3项目 1.1.创建Vue3项目 1.1.1.运行创建项目命令 # 使用 npm npm create vitelatest 1.1.2、填写项目名称 1.1.3、选择前端框架 1.1.4、选择语法类型 1.1.5、按提示运行代码 1.1.6浏览器问 localhost:5173 预览 1.2项目结构 1.2.1vite.config.ts 1.2.2 pac…

基于线性回归(Linear Regression)的房屋价格预测

基于线性回归(Linear Regression)的房屋价格预测 一元线性回归加载数据假设函数损失函数(代价函数)梯度下降函数完整代码 多变量线性回归加载数据集特征缩放假设函数损失函数梯度下降函数算法步骤完整代码 线性回归是统计学中的一…

【二轮征稿启动】第三届环境工程与可持续能源国际会议持续收录优质稿件

第三届环境工程与与可持续能源国际会议(EESE 2024)由中南林业科技大学主办,湖南农业大学协办,将于2024年12月20日-22日在湖南长沙召开。 大会邀请到国家杰出青年科学基金获得者、华中科技大学能源与动力工程学院冯光教授&#xf…

R实验——logistic回归、LDA、QDAKNN

数据集介绍: mpg,miles per gallon即油耗,这个数据集来自卡内基梅隆大学维护的StatLib库。1983年美国统计协会博览会使用了该数据集。这个数据集是对StatLib库中提供的数据集稍加修改的版本。根据Ross Quinlan(1993)在预测属性“mpg”中的使…

计算机网络原理总结C-网络层

网络层 网络层提供的两种服务网际协议IP 虚拟互连网络IP地址子网掩码(无分类编址CIDR)IP地址和MAC地址IP数据报格式(路由)转发分组的流程 因特网的路由选择协议(动态路由协议) 网际控制报文协议ICMPIP多播…

认识CSS语法

CSS(网页美容) 重点:选择器、盒子模型、浮动、定位、动画,伸缩布局 Css的作用: 美化网页:CSS控制标签的样式 网页布局:CSS控制标签的位置 概念:层叠样式表(级联样式表…

UE5 第一人称示例代码阅读0 UEnhancedInputComponent

UEnhancedInputComponent使用流程 我的总结示例分析firstthenand thenfinally&代码关于键盘输入XYZ 我的总结 这个东西是一个对输入进行控制的系统,看了一下第一人称例子里,算是看明白了,但是感觉这东西使用起来有点绕,特此梳…

布隆过滤器:极简存储,高效检索

引言 在海量数据的存储与检索中,如何在保持快速检索的同时,降低内存占用是个巨大的挑战。有没有一种既能快速检索又能节省内存的方案?布隆过滤器(Bloom Filter)就是这样一种数据结构。 布隆过滤器的基本原理 如果我…