Android 环信IM即时通讯 自定义扩展消息 注意点

android 自定义扩展消息

1.创建自定义扩展消息字段:



2.创建自定义扩展消息实例:(并创建get/set)




3.那么接下来我们需要到chatFragment里面去注册这个按钮创建一个触发事件:

先去定义几个常量在chatFragment里面定义好之后:



那么接下来我们需要到chatFragment里面去注册这个按钮:




然后,我们需要到onExtendMenuItemClick这个方法中写名片按钮的点击事件:



大家看到了是个startActivityForResult,看到这里,肯定接下来就是去到REQUEST_CODE_SELECT_ADMIN_MESSAGE里面接收data:



接下来我们需要去CustomChatRowProvider这个内部类里面去设置发送接收,大家需要注意getCustomChatRowTypeCount(){}方法里面必须要加上2,这个2的意思就是说发送和接收系统通知(会在后面解释为什么需要加上2):



接下来这个非常重要,这个是系统通知消息的ChatRow,就是载体



4.new一个chatRow出来,这个chatRow在easeui里面是没有的,所以需要我们自己写



这里设置完了之后,基本上就好了,布局我没有放出来,等会看运行之后的效果

贴上判断是否是系统通知方法。可以自己定义


public static boolean isAdminMessage(EMMessage emMessage){
    String Type = emMessage.getStringAttribute(AdminRawModel.adminExtType,null);
    if (Type == null){
        return false;
    }

    if (Type.equals("adminExtType")){
        return true;
    }

    return false;
}


5.在easeui库中找的EaseMessageAdapter类(这个是消息适配器)。

定义两个常量,用于表示消息类型(注意:扩展一种消息类型,需要定义两个常量:接收+发送 定义的常量数值不能超出定义的常量数量太多否者会报数组越界错)):


private static final int MESSAGE_TYPE_SENT_ADMINMESSAGE = 14;
private static final int MESSAGE_TYPE_RECV_ADMINMESSAGE = 15;

getViewTypeCount()修改返回的消息类型: +2(每扩展一种消息类型,返回的数值+2)

那么接下来我们需要到chatFragment里面去注册这个按钮创建一个触发事件:

public int getViewTypeCount() {
    if(customRowProvider != null && customRowProvider.getCustomChatRowTypeCount() > 0){
        return customRowProvider.getCustomChatRowTypeCount() + 16;
    }
       return 16;
   }

在getItemViewType()方法中设置返回的消息类型,并+2:

/**
 * get type of item
 */
public int getItemViewType(int position) {
   EMMessage message = getItem(position); 
   if (message == null) {
      return -1;
   }
   
   if(customRowProvider != null && customRowProvider.getCustomChatRowType(message) > 0){
       return customRowProvider.getCustomChatRowType(message) + 15;
   }
   
   if (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(AdminRawModel.adminExtType,false)){
         return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_ADMINMESSAGE : MESSAGE_TYPE_SENT_ADMINMESSAGE;
      }
      return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_TXT : MESSAGE_TYPE_SENT_TXT;
   }
   if (message.getType() == EMMessage.Type.IMAGE) {
      return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_IMAGE : MESSAGE_TYPE_SENT_IMAGE;

   }
   if (message.getType() == EMMessage.Type.LOCATION) {
      return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_LOCATION : MESSAGE_TYPE_SENT_LOCATION;
   }
   if (message.getType() == EMMessage.Type.VOICE) {
      return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_VOICE : MESSAGE_TYPE_SENT_VOICE;
   }
   if (message.getType() == EMMessage.Type.VIDEO) {
      return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_VIDEO : MESSAGE_TYPE_SENT_VIDEO;
   }
   if (message.getType() == EMMessage.Type.FILE) {
      return message.direct() == EMMessage.Direct.RECEIVE ? MESSAGE_TYPE_RECV_FILE : MESSAGE_TYPE_SENT_FILE;
   }

   return -1;// invalid
}

在createChatRow()方法中设置消息的类:

protected EaseChatRow createChatRow(Context context, EMMessage message, int position) {
       EaseChatRow chatRow = null;
       if(customRowProvider != null && customRowProvider.getCustomChatRow(message, position, this) != null){
           return customRowProvider.getCustomChatRow(message, position, this);
       }
       switch (message.getType()) {
       case TXT:
           if(message.getBooleanAttribute(EaseConstant.MESSAGE_ATTR_IS_BIG_EXPRESSION, false)){
               chatRow = new EaseChatRowBigExpression(context, message, position, this);
           }else if(message.getBooleanAttribute(AdminRawModel.adminExtType, false)){
         chatRow = new AdminMessageRow(context, message, position, this);
      }else{
               chatRow = new EaseChatRowText(context, message, position, this);
           }
           break;
       case LOCATION:
           chatRow = new EaseChatRowLocation(context, message, position, this);
           break;
       case FILE:
           chatRow = new EaseChatRowFile(context, message, position, this);
           break;
       case IMAGE:
           chatRow = new EaseChatRowImage(context, message, position, this);
           break;
       case VOICE:
           chatRow = new EaseChatRowVoice(context, message, position, this);
           break;
       case VIDEO:
           chatRow = new EaseChatRowVideo(context, message, position, this);
           break;
       default:
           break;
       }

       return chatRow;
   }

到此已经完成了扩展消息的开发。


那么接下来我们需要到chatFragment里面去注册这个按钮创建一个触发事件:
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值