环信IM聊天<基于版本V3.22-V3.3>

1.通过扩展消息传递头像

EMClient.getInstance().chatManager().sendMessage(message);
//接收消息的时候获取到扩展属性
//获取自定义的属性,第2个参数为没有此定义的属性时返回的默认值
message.getStringAttribute("attribute1",null);
message.getBooleanAttribute("attribute2", false);

上面API就可以将扩展消息传递出去,收到消息后直接message.getStringAttribute()可以很方便的获取到扩展消息了

android环信聊天demo 环信app安全吗_List

  最好不要在DemoHelp调用上图的方法,我之前使用这个方法出现的问题:多存了一遍内存,消息会重复,但是不是一定会产生,需要条件(你app被杀死后,然后运行app,把app切换到后台,然后再进去消息里面你就会发现有重复消息了,只需要将app杀死,后面再进去就没了)

2.通过透传消息进行回撤

1.<接收>找到DemoHelp的onCmdMessageReceived()这个回调,调用下面的方法就行了,

if (action.equals("cmd_revoke")) {
        try {
                String msgid = message.getStringAttribute("msgid");
EMConversation conversation =EMClient.getInstance().chatManager().getConversation(message.getTo());
             //--删除消息来表示撤回--
               conversation.removeMessage(msgid);
                           refreshUI(); 
               } catch (HyphenateException e) {
                            e.printStackTrace();
               }
        }
*注意:EMClient.getInstance().chatManager().getConversation(message.getTo());这个方法message.getTo()是群Id 群组撤回  message.getFrom()单聊撤回

2.<发送>发送透传消息撤销ChatFragment类

//撤回消息
    private void msgRevocation(String msgId) {
        EMMessage cmdMsg = EMMessage.createSendMessage(EMMessage.Type.CMD);
        // 如果是群聊,设置chattype,默认是单聊
        if (chatType == CHATTYPE_GROUP) {
            cmdMsg.setChatType(EMMessage.ChatType.GroupChat);
        }
        String action = "cmd_revoke";
        EMCmdMessageBody cmdBody = new EMCmdMessageBody(action);
        // 设置消息body
        cmdMsg.addBody(cmdBody);
        // 设置要发给谁,用户username或者群聊groupid
        cmdMsg.setTo(toChatUsername);
        // 通过扩展字段添加要撤回消息的id
        cmdMsg.setAttribute("msgid", msgId);
        cmdMsg.setMessageStatusCallback(new EMCallBack() {
            @Override
            public void onSuccess() {
                //撤销成功,删除本地改数据
                conversation.removeMessage(contextMenuMessage.getMsgId());
                messageList.refresh();
                ToastUtils.showLongToastSafe("撤销消息成功");
            }

            @Override
            public void onError(int i, String s) {
                ToastUtils.showLongToastSafe("撤回失败");
            }

            @Override
            public void onProgress(int i, String s) {
            }
        });
        EMClient.getInstance().chatManager().sendMessage(cmdMsg);

    }

3.Demo的视频录制在华为有的手机上会卡死

  原因是因为Canvas不有释放