鸿蒙开发融云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源码结构图:
有问题或者需要完整源码的私信我