注册

android端环信集成做消息回撤,单聊可以撤回,群聊加上官方文档那两句代码还是不行

     //发送透传消息代码如下:   
        String action="REVOKE_FLAG";
        EMMessage cmdMessage=EMMessage.createSendMessage(EMMessage.Type.CMD);
        if (message.getChatType() == EMMessage.ChatType.GroupChat){
            Log.i(TAG, "是群组消息");
            cmdMessage.setChatType(ChatType.GroupChat);
        }
        EMCmdMessageBody cmdBody=new EMCmdMessageBody(action);
        String toChatUserName=getIntent().getExtras().getString("toChatUserName");
        Log.i(TAG,"toChatUserName------>"+toChatUserName);
        cmdMessage.setReceipt(toChatUserName);
        String msgId=message.getMsgId();
        Log.i(TAG, "msgIdsend-------->"+msgId);
        cmdMessage.setAttribute("msgid",msgId);
        cmdMessage.addBody(cmdBody); 
        EMClient.getInstance().chatManager().sendMessage(cmdMessage);
 
       //接收透传消息代码如下:
 @Override
    public void onCmdMessageReceived(List messages) {
        for (EMMessage message : messages) {
            EMCmdMessageBody cmdMsgBody = (EMCmdMessageBody) message.getBody();
            String action = cmdMsgBody.action();
            
            //TODO 接收cmd信息
            if (action.equals("REVOKE_FLAG")) {
                Log.i(TAG, "进入");
                String msgId;
                try {
                    msgId = message.getStringAttribute("msgid");
                    Log.i(TAG, "msgIdreceive-------->"+msgId);
                    EMConversation conversation =EMClient.getInstance().chatManager().getConversation(message.getFrom());
                    //--删除消息来表示撤回--
                    conversation.removeMessage(msgId);
                    messageList.refresh();
                    // 如果需要,可以插入一条“XXX回撤一条消息”
                } catch (HyphenateException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        //end of red packet code
        super.onCmdMessageReceived(messages);
    }
已邀请:
消息回撤就是发送透传消息,把需要撤回的消息的msgid放在消息扩展里发过去,其他人收到之后就去获取透传消息的扩展里的msgid,然后去调用删除消息方法去删除对应的消息,记得去刷新界面。检查看看你的流程对吗
你好,请问一下这个问题解决了吗?

要回复问题请先登录注册