鸿蒙开发融云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源码结构图:

 有问题或者需要完整源码的私信我



















