目的:修改自己在本群的昵称,别人收到消息时显示昵称,而不是真实昵称
注意:修改在群中的昵称需要注意两个点:第一个自身群昵称的改变,第二个要通知别的群里,修改自己的昵称。
思路:
- 当修改自己在群的昵称的时候,进行刷新自身的群昵称,该方法为如以下代码所示(文档传送门)
/**
* 更新本地昵称
*/
private void refreshGroupLocalNickName(String name) {
GroupUserInfo info = new GroupUserInfo(fromConversationId, SharedPreferencesUtil.getString(MyApplication.getInstance().getApplicationContext(),"uid"), name);
RongIM.getInstance().refreshGroupUserInfoCache(info);
}
- 设置发送消息监听器,判断群昵称是否与原昵称是否相同,如果相同就不添加extra字段,如果不同就应该添加extra字段
private void setSendMessageListener() {
RongIM.getInstance().setSendMessageListener(new RongIM.OnSendMessageListener() {
@Override
public Message onSend(Message message) {
if (null != message.getContent() && message.getContent() instanceof TextMessage) {
TextMessage txtMsg = (TextMessage) message.getContent();
if (null != txtMsg) {
if (mConversationType.equals(Conversation.ConversationType.GROUP)) {
//获取群昵称查看群昵称是否与原昵称相同,相同就不增加extra字段
// requestGroupNickName(mTargetId);
GroupUserInfo groupUserInfo = RongUserInfoManager.getInstance().getGroupUserInfo(mTargetId, SharedPreferencesUtil.getString(MyApplication.getInstance().getApplicationContext(),"uid"));
//必须去判断是否为空,否则会报空指针
if (null != groupUserInfo) {
if (null != groupUserInfo.getNickname()) {
if (!groupUserInfo.getNickname().equals(MyApplication.getInstance().getUser().getNickname())) {
txtMsg.setExtra(groupUserInfo.getNickname() + GroupChatInfoActivity.GROUP_NICKNAME_EXTRA + MyApplication.getInstance().getUser().getNickname());
}
}
}
} else if (mConversationType.equals(Conversation.ConversationType.PRIVATE)) {
//在私聊的过程中会有阅后即焚的条目
if (is_burn) {
txtMsg.setExtra(DELETE_TAG);
}
}
}
}
return message;
}
@Override
public boolean onSent(Message message, RongIM.SentMessageErrorCode sentMessageErrorCode) {
if (message.getSentStatus() == Message.SentStatus.FAILED) {
if (sentMessageErrorCode == RongIM.SentMessageErrorCode.NOT_IN_CHATROOM) {
//不在聊天室
} else if (sentMessageErrorCode == RongIM.SentMessageErrorCode.NOT_IN_DISCUSSION) {
//不在讨论组
} else if (sentMessageErrorCode == RongIM.SentMessageErrorCode.NOT_IN_GROUP) {
//不在群组
} else if (sentMessageErrorCode == RongIM.SentMessageErrorCode.REJECTED_BY_BLACKLIST) {
//你在他的黑名单中
}
}
MessageContent messageContent = message.getContent();
if (messageContent instanceof TextMessage) {//文本消息
TextMessage textMessage = (TextMessage) messageContent;
Log.d(TAG, "onSent-TextMessage:" + textMessage.getContent());
} else if (messageContent instanceof ImageMessage) {//图片消息
ImageMessage imageMessage = (ImageMessage) messageContent;
Log.d(TAG, "onSent-ImageMessage:" + imageMessage.getRemoteUri());
} else if (messageContent instanceof VoiceMessage) {//语音消息
VoiceMessage voiceMessage = (VoiceMessage) messageContent;
Log.d(TAG, "onSent-voiceMessage:" + voiceMessage.getUri().toString());
} else if (messageContent instanceof RichContentMessage) {//图文消息
RichContentMessage richContentMessage = (RichContentMessage) messageContent;
Log.d(TAG, "onSent-RichContentMessage:" + richContentMessage.getContent());
} else {
Log.d(TAG, "onSent-其他消息,自己来判断处理");
}
/**
* 只支持文本阅后即焚
*/
if (null != message && message.getContent() instanceof TextMessage) {
TextMessage txtMsg = (TextMessage) message.getContent();
if (null != txtMsg.getExtra() && txtMsg.getExtra().toString().equals(DELETE_TAG)) {
sendMessageIds.add(message.getMessageId()); //获取发送的id ,进行焚烧状态
setSendReadReceiptRequest(message);
}
}
return false;
}
});
}
- 设置接收监听器,在接收监听器中查看是否存在该extra字段,如果存在就进行相应的操作(这里需要注意的是如果用extra添加昵称信息,只有修改昵称的那个用户给你发消息,自己的昵称才会改变)
if (null != message.getContent() && message.getContent() instanceof TextMessage) {
TextMessage txtMsg = (TextMessage) message.getContent();
// 用于修改相应的群组昵称
if (null != txtMsg.getExtra() && txtMsg.getExtra().indexOf(GroupChatInfoActivity.GROUP_NICKNAME_EXTRA) != -1) {
String[] str = txtMsg.getExtra().split(GroupChatInfoActivity.GROUP_NICKNAME_EXTRA);
//应该怎么去处理呢
if (message.getConversationType().equals(Conversation.ConversationType.GROUP)) {
GroupUserInfo groupUserInfo = RongUserInfoManager.getInstance().getGroupUserInfo(message.getTargetId(), message.getSenderUserId());
if (!str[1].equals(str[0])) {
GroupUserInfo info = new GroupUserInfo(message.getTargetId(), message.getSenderUserId(), str[0]);
RongIM.getInstance().refreshGroupUserInfoCache(info);
}
}
}
}
需要注意:当时修改群昵称的过程中与设置阅后即焚的extra会出现冲突,即如果即改变了群昵称,又需要阅后即焚,所以最后群昵称只是在群中,阅后即焚针对的私聊
另外一种思路:利用provider方法
- 修改相应的昵称,通过刷新 RonIm.getInstance.refreshGroupUserInfoCache(),刷新本地信息
2.在Application阶段通过相应的GroupUserInfoProvider()获取相应的信息,通过后台server端获取相应的修改的群昵称。