public class LinkConstant {
public static final String linkExtType = "linkExtType";//链接信息扩展
public static final String linkUrl = "linkUrl";//链接信息扩展
public static final String linkTitle = "linkTitle";//链接标题
public static final String linkImgUrl = "linkImgUrl";//链接图片
public static final String linkDesc = "linkDesc";//链接信息小文字描述
}
在EaseMessageAdapter中定义两个常量
public static final int MESSAGE_TYPE_RECV_LINKINFOEXT_CALL = 14;
public static final int MESSAGE_TYPE_SEND_LINKINFOEXT_CALL = 15;
在EaseMessageAdapter中的getViewTypeCount()方法中修改值分为+2
public int getViewTypeCount() {
if(customRowProvider != null && customRowProvider.getCustomChatRowTypeCount() > 0){
return customRowProvider.getCustomChatRowTypeCount() + 14 + 2;
}
return 14 + 2;
}
接着在getItemViewType方法中+2
if(customRowProvider != null && customRowProvider.getCustomChatRowType(message) > 0){
return customRowProvider.getCustomChatRowType(message) + 13 + 2;
}
并在这个方法中找到message.getType() == EMMEssage.Type.TXT中增加我们新建的
if(message.getBooleanAttribute(EaseConstant.MESSAGE_ATTR_IS_BIG_EXPRESSION, false)){
return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_EXPRESSION : MESSAGE_TYPE_SENT_EXPRESSION;
}else if (message.getBooleanAttribute("link",false)){
return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_LINKINFOEXT_CALL : MESSAGE_TYPE_SEND_LINKINFOEXT_CALL;
}
return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_TXT : MESSAGE_TYPE_SENT_TXT;
也就是只增加了else if判断,link参数是自定义的,根据发送自定义参数。
紧接着在它下面的createChatRowPresenter方法中的case TXT:也要加判断
case TXT:
if(message.getBooleanAttribute(EaseConstant.MESSAGE_ATTR_IS_BIG_EXPRESSION, false)){
presenter = new EaseChatBigExpressionPresenter();
}else if (message.getBooleanAttribute("link",false)){
presenter = new EaseChatLinkPresenter();//需要自己创建
}else{
presenter = new EaseChatTextPresenter();
}
break;
也是增加了else if()方法。接下来去创建自己的EaseChatLinkPresenter()类。
public class EaseChatLinkPresenter extends EaseChatRowPresenter {
@Override
protected EaseChatRow onCreateChatRow(Context cxt, EMMessage message, int position, BaseAdapter adapter) {
return new EaseChatLink(cxt, message, position, adapter);
}
}
再创建EaseChatLink类。这个类就是创建布局以及初始化,事件也可以在这上面处理。
public class EaseChatLink extends EaseChatRow {
private ImageView img;
private LinearLayout ll_loading,ll_link;
private TextView title, desc;
private String titleStr,linkUrl;
public EaseChatLink(Context context, EMMessage message, int position, BaseAdapter adapter) {
super(context, message, position, adapter);
}
@Override
protected void onInflateView() {
inflater.inflate(message.direct() == EMMessage.Direct.RECEIVE ?
R.layout.ease_row_received_link : R.layout.ease_row_send_link, this);
}
@Override
protected void onFindViewById() {
title = (TextView) findViewById(R.id.link_title);
desc = (TextView) findViewById(R.id.link_content);
img = (ImageView) findViewById(R.id.image);
ll_link = (LinearLayout) findViewById(R.id.ease_ll_link);
ll_loading = (LinearLayout) findViewById(R.id.ll_loading);
}
@Override
protected void onViewUpdate(EMMessage msg) {
adapter.notifyDataSetChanged();
}
@Override
protected void onSetUpView() {
EMTextMessageBody textMessageBody = (EMTextMessageBody) message.getBody();
message.getStringAttribute(LinkConstant.linkExtType, null);
titleStr = message.getStringAttribute(LinkConstant.linkTitle, null);
String descStr = message.getStringAttribute(LinkConstant.linkDesc, null);
String imgurlStr = message.getStringAttribute(LinkConstant.linkImgUrl, null);
linkUrl = message.getStringAttribute(LinkConstant.linkUrl, null);
if (!TextUtils.isEmpty(titleStr))
title.setText(titleStr);
if (!TextUtils.isEmpty(descStr))
desc.setText(descStr);
else
desc.setText(linkUrl);
Glide.with(context).load(imgurlStr).into(img);
ll_loading.setVisibility(GONE);
ll_link.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, EaseShowWebActivity.class);
intent.putExtra("title",titleStr);
intent.putExtra("link",linkUrl);
context.startActivity(intent);
}
});
}
}
到这里除了发送应该都差不多了,上面两个layout布局是自己写的接收发送自定义消息布局。
EMMessage message = EMMessage.createTxtSendMessage(title, username);
message.setAttribute(LinkConstant.linkExtType, true);//设置扩展字段
message.setAttribute("link", true);//设置扩展字段
message.setAttribute(LinkConstant.linkTitle, title);//将title设置到扩展字段
message.setAttribute(LinkConstant.linkUrl, link);//将title设置到扩展字段
message.setAttribute(LinkConstant.linkImgUrl, icon);//将imgUrl设置到扩展字段
message.setAttribute(LinkConstant.linkDesc, content);//将desc设置到扩展字段
//设置群聊和聊天室发送消息
if (conversation.isGroup()){
message.setChatType(EMMessage.ChatType.GroupChat);
}
EMClient.getInstance().chatManager().sendMessage(message);