android环信3.0v回撤,环信Android消息回撤

环信现在的消息回撤开发文档没有更新, 所以得自己去写, 本人贡献点小东西.本项目用的SDK版本为3.3.1.

1. 首先在聊天消息里添加消息长按事件监听,里面添加撤回消息选项.

撤回点击之后处理为:  发送撤回消息!!!!!!cmdMsg = EMMessage.createSendMessage(EMMessage.Type.CMD);

// 如果是群聊, 设置chatType, 默认是单聊

if(chatType == Constant.CHATTYPE_GROUP){

cmdMsg.setChatType(ChatType.GroupChat);

}

String action = "REVOKE_FLAG";

EMCmdMessageBody cmdBody=new EMCmdMessageBody(action);

// 设置消息body

cmdMsg.addBody(cmdBody);

// 设置要发给谁, 用户username 或者群聊 grouid

cmdMsg.setTo(toChatUsername);

// 通过扩展字段添加要撤回消息的iD

cmdMsg.setAttribute("msgId", msgid);// 长按的时候, 获取本信息的message的Id

//long aa = cmdMsg.getMsgTime();// 获取这个消息的发送时间

// 获取当前系统的时间

long time = new Date().getTime();

long minite = (time - aa - 6000)/1000;// 1s = 1000

if(minite <= 120){

EMClient.getInstance().chatManager().sendMessage(cmdMsg);

cmdMsg.setMessageStatusCallback(new EMCallBack() {

@Override

public void onSuccess() {

conversation.removeMessage(msgid);

handler.sendEmptyMessage(1);

}

@Override

public void onProgress(int arg0, String arg1) {

}

@Override

public void onError(int arg0, String arg1) {

// TODO Auto-generated method stub

String a = "";

//conversation.removeMessage(msgid);

}

});

}else{

ToastUtils.ToastShortMessage(getActivity(), "发送时间超过2分钟的消息!不能被撤回!");

}

break;此处handler.sendEmptyMessage(1);中的内容是:

ToastUtils.ToastShortMessage(getActivity(), "消息已撤回!");

messageList.refresh();2. 环信在获取CMD消息监听有三个地方: 分别为, EaseChatFragment, MainActivity, DemoHelper(此处为App后台运行时, 消息撤回的处理)

在EMMessageListener下的onCmdMessageReceived()中处理接受到的CMD消息, 首先贴上的为EaseChatFragment里面的: for(EMMessage emMessage : messages){

EMCmdMessageBody cmdMessageBody = (EMCmdMessageBody)emMessage.getBody();

String action = cmdMessageBody.action();

if(action.equals("REVOKE_FLAG")){

try {

msgId = emMessage.getStringAttribute("msgId");

conversation1 = EMClient.getInstance().chatManager().getConversation(emMessage.getFrom());

if(emMessage.getChatType() == ChatType.GroupChat){

messageList.refreshSelectLast(); //刷新UI

}else{

handler.sendEmptyMessage(1);

}

} catch (HyphenateException e) {

e.printStackTrace();

}

}

}此处handler.sendEmptyMessage(1)中的内容是:

// 删除表示撤销

conversation1.removeMessage(msgId);

messageList.refreshSelectLast();3. MainActivity里面的处理方式:for(EMMessage emMessage : messages){

EMCmdMessageBody cmdMessageBody = (EMCmdMessageBody)emMessage.getBody();

String action = cmdMessageBody.action();

if(action.equals("REVOKE_FLAG")){

try {

msgId = emMessage.getStringAttribute("msgId");

conversation1 = EMClient.getInstance().chatManager().getConversation(emMessage.getFrom());

if(emMessage.getChatType() == ChatType.GroupChat){

refreshUIWithMessage(); // 刷新UI

}else{

handler.sendEmptyMessage(1);

}

} catch (HyphenateException e) {

e.printStackTrace();

}

}

} 此时handler.sendEmperymessage(1)中:

conversation1.removeMessage(msgId);

refreshUIWithMessage();4. DemoHelper里面的处理方式:for (final EMMessage message : messages) {

// 获取消息body

EMCmdMessageBody cmdMsgBody = (EMCmdMessageBody) message.getBody();

final String action = cmdMsgBody.action();// 获取自定义action

// 发送一个透传消息

if(action.equals("REVOKE_FLAG")){

try {

if(message.getChatType() == ChatType.GroupChat){// 群组处理方式

conversation1 = EMClient.getInstance().chatManager().getConversation(message.getTo(), EaseCommonUtils.getConversationType(2), true);

}else{

conversation1 = EMClient.getInstance().chatManager().getConversation(message.getFrom());

}

msgId = message.getStringAttribute("msgId");

handler.sendEmptyMessage(1);

} catch (HyphenateException e) {

e.printStackTrace();

}

}

}此时handler.sendEmpertyMessage(1)中的方法是:

conversation1.removeMessage(msgId);至此,环信消息回调完成, 没有去做撤回回调处理,直接删除不好,如果想做的请自行处理.谢谢,本文纯属原创,如果有问题,可与我联系,QQ邮箱: 277667430@qq.com.本人姓氏: 侯

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值