Android 环信IM拓展消息

一、定义字段

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);

四、完成效果 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值