当前位置: 首页 > article >正文

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

鸿蒙开发融云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.kler.cn/news/365721.html

相关文章:

  • 借助Agent让大模型应用思考、决策并执行任务
  • Dockerfile搭建ELK
  • 985研一,转嵌入式好还是后端开发好?
  • Python中input()输入函数和print()输出函数的用法
  • uniapp 常用的地区行业各种多选多选,支持回显,复制粘贴可使用
  • django5入门【01】环境配置
  • fpga系列 HDL: 竞争和冒险 01
  • JMeter与大模型融合应用之JMeter创建二级菜单的简单大模型交互
  • 企业自建邮件系统选U-Mail ,功能强大、安全稳定
  • jenkins国内插件源
  • 深入解析 MySQL 数据库:更新和删除
  • 【Java小白图文教程】-05-数组和排序算法详解
  • docker 可用镜像服务地址(2024.10.25亲测可用)
  • 【ChatGPT插件漏洞三连发之二】零点击Github仓库接管
  • Visual 使用技巧合辑
  • 栅格的着色器实现【最完善】
  • 使用AutoDL训练YOLO等计算机视觉网络模型(AutoDL+Xftp+VS Code),附详细操作步骤
  • 打开Windows来体验AIGC或者ChatGPT
  • Python使用asyncio实现异步操作
  • 深度学习系列——RNN/LSTM/GRU,seq2seq/attention机制
  • AI学习指南自然语言处理篇-Transformer模型的编码器-解码器结构
  • OpenCV通道拆分:深入理解图像处理
  • Swift 是一种由苹果公司开发的强大而直观的编程语言,主要用于开发 iOS、macOS、watchOS 和 tvOS 等苹果平台的应用程序。
  • Spring Boot:植物健康监测的智能解决方案
  • Spring Boot框架下的Java多线程
  • 【继承】讲解