目的:修改自己在本群的昵稱吼和,別人收到消息時顯示昵稱拉鹃,而不是真實昵稱
注意:修改在群中的昵稱需要注意兩個點:第一個自身群昵稱的改變擎值,第二個要通知別的群里慌烧,修改自己的昵稱。
思路:
- 當修改自己在群的昵稱的時候鸠儿,進行刷新自身的群昵稱屹蚊,該方法為如以下代碼所示(文檔傳送門)
/**
* 更新本地昵稱
*/
private void refreshGroupLocalNickName(String name) {
GroupUserInfo info = new GroupUserInfo(fromConversationId, SharedPreferencesUtil.getString(MyApplication.getInstance().getApplicationContext(),"uid"), name);
RongIM.getInstance().refreshGroupUserInfoCache(info);
}
- 設置發(fā)送消息監(jiān)聽器厕氨,判斷群昵稱是否與原昵稱是否相同,如果相同就不添加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()); //獲取發(fā)送的id ,進行焚燒狀態(tài)
setSendReadReceiptRequest(message);
}
}
return false;
}
});
}
- 設置接收監(jiān)聽器冯丙,在接收監(jiān)聽器中查看是否存在該extra字段,如果存在就進行相應的操作(這里需要注意的是如果用extra添加昵稱信息遭京,只有修改昵稱的那個用戶給你發(fā)消息胃惜,自己的昵稱才會改變)
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端獲取相應的修改的群昵稱。