老版本的环信,实现消息撤回功能。

本文介绍了在一个使用老版本环信SDK(2.2.4)的app中,如何添加消息撤回功能。通过在ChatActivity的EaseChatFragment中监听消息框的长按事件,实现消息撤回的功能逻辑。具体步骤包括处理点击事件、展示选择框、撤回操作的实现以及接收并处理撤回消息的回调。提供了参考链接和关键代码片段,帮助开发者完成类似功能的集成。
摘要由CSDN通过智能技术生成

最近公司很久之前的一个集成过环信聊天功能的app,要增加消息撤回的功能,由于这个app是很久之前的。。所以,那个时候的easeUi里面并没有这个功能,于是就参照有这个功能的sdk,把代码搬了过来。。
Ps:当前的sdk版本是2.2.4

首先找到聊天页面ChatActivity页面,里面是一个EaseUi里面的EaseChatFragment,然后找到消息框点击事件,messageList有个item点击事件,(EaseChatMessageList.MessageListItemClickListener),有一系列事件,你可以写在消息框点击事件里(onBubbleClick),也可以写在消息框长按事件里面(onBubbleLongClick),我是选择了后者。

原理图:
这里写图片描述

参考链接:
http://docs.easemob.com/im/490integrationcases/revoke-messages

下面是效果图:
这里写图片描述

下面贴代码:

messageList.setItemClickListener(new EaseChatMessageList.MessageListItemClickListener() {

            @Override
            public void onUserAvatarClick(String username) {
                if (chatFragmentListener != null) {
                    chatFragmentListener.onAvatarClick(username);
                }
            }

            @Override
            public void onResendClick(final EMMessage message) {
                new EaseAlertDialog(getActivity(), R.string.resend, R.string.confirm_resend, null, new AlertDialogUser() {
                    @Override
                    public void onResult(boolean confirmed, Bundle bundle) {
                        if (!confirmed) {
                            return;
                        }
                        resendMessage(message);
                    }
                }, true).show();
            }

            @Override
            public void onBubbleLongClick(EMMessage message) {
                contextMenuMessage = message;
                //这个是用来控制撤回这个菜单是否显示
                boolean isvisibilty = false;
                /**
                 * callback:这个用来判断是否已经是撤回的消息,
                 * 在消息撤回以后,会发送一条新的消息,内容是XX
                 * 撤回了一条消息(我暂且叫CallMessage)
                 * 我在这个CallMessage中加了个扩展字段callback,来标识该条消息已经是
                 * 撤回的消息了。即再长按该条消息不需要再显示撤回这个菜单了
                 *
                 */
                boolean callback = false;
                try {
                    callback = message.getBooleanAttribute("callback");//如果已经是撤回的消息了,就不要显示撤回这个选项了
                } catch (EaseMobException e) {
                    e.printStackTrace();
                }
                /**
                 * 这里需要判断下该条消息必须是自己发的,并且不是CallMessage
                 * 才能显示撤回菜单
                 */
                if (message.getFrom().equals(user.getHuanxinId()) && !callback) {
                    isvisibilty = true;
                } else {
                    isvisibilty = false;
                }
                //长按以后弹出一个选择框(包括复制消息,删除消息,和撤回消息)
                startActivityForResult((new Intent(getActivity(), ContextMenuActivity.class))
                                .putExtra("message", message)
                                .putExtra("ischatroom", chatType == EaseConstant.CHATTYPE_CHATROOM)
                                .putExtra("isvisibilty", isvisibilty),
                        REQUEST_CODE_CONTEXT_MENU);
            }

            @Override
            public boolean onBubbleClick(EMMessage message) {
                if (chatFragmentListener != null) {
                    return chatFragmentListener.onMessageBubbleClick(message);
                }
                return false;
            }
        });

选择框的样式:
这里写图片描述

下面是ContextMenuActivity.class(选择框)

import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;

import com.easemob.chat.EMMessage;
import com.easemob.easeui.R;
import com.easemob.easeui.utils.Constant;

//import com.easemob.redpacketsdk.constant.RPConstant;
//import com.hyphenate.chat.EMMessage;
//import com.hyphenate.chatuidemo.Constant;
//import com.hyphenate.chatuidemo.R;

/**
 * 选择框页面,根据不同的type,来配置不同的布局,因为有的不需要有复制消息这个菜单
 */
public class ContextMenuActivity extends EaseBaseActivity {
   
    public 
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值