主要的 :
上线是enterRoom();
进入聊天室我们得携带一些参数,这样以后每发一条消息都会将这些参数携带;
Map<String, Object> ext = new HashMap<>(); 格式是map
ext.put("live_chatroom_level", "");
ext.put("live_chatroom_identity", usertype);
ext.put("live_user_id", userid);
ext.put("avatar", upUrl);
enterChatRoomData = new EnterChatRoomData(chatroomid);
enterChatRoomData.setAvatar(upUrl); 用户图像
enterChatRoomData.setNick(username); 用户昵称
enterChatRoomData.setExtension(ext); 这是普通消息的扩展字段
enterChatRoomData.setNotifyExtension(ext); 这是系统消息(网易发的像进入直播间,离开直播间,禁言之类的) 的扩展字段
NIMClient.getService(ChatRoomService.class).enterChatRoom(enterChatRoomData).setCallback(new RequestCallback() {
@Override
public void onSuccess(Object o) {
chatMessageList.add(new LiveChatMessage(getResources().getString(R.string.live_enter_msg), "", false));
chatAdapter.notifyDataSetChanged();
}
@Override
public void onFailed(int i) { 这里可以做一些失败重连
// int eCode = NIMClient.getService(ChatRoomService.class).getEnterErrorCode(chatroomid);
chatMessageList.add(new LiveChatMessage("进入聊天室失败" + i, "", false));
chatAdapter.notifyDataSetChanged();
if (i == 404) {
chatMessageList.add(new LiveChatMessage("直播间已关闭", "", false));
chatAdapter.notifyDataSetChanged();
} else if (i==13002){
chatMessageList.add(new LiveChatMessage("直播间已关闭", "", false));
chatAdapter.notifyDataSetChanged();
}else if (i == 415) {
chatMessageList.add(new LiveChatMessage("网络信号弱", "", false));
chatMessageList.add(new LiveChatMessage("自动重新登录", "", false));
chatAdapter.notifyDataSetChanged();
mxEnterRoomMore(false);
} else {
chatMessageList.add(new LiveChatMessage("登录失败", "", false));
chatMessageList.add(new LiveChatMessage("自动重新登录", "", false));
chatAdapter.notifyDataSetChanged();
mxEnterRoomMore(true);
}
}
@Override
public void onException(Throwable throwable) {
// int eCode = NIMClient.getService(ChatRoomService.class).getEnterErrorCode(chatroomid);
chatMessageList.add(new LiveChatMessage("登录失败", "", false));
chatMessageList.add(new LiveChatMessage("自动重新登录", "", false));
chatAdapter.notifyDataSetChanged();
mxEnterRoomMore(true);
}
});
}
private void initChat() {
NIMClient.toggleNotification(false);
} 初始化消息
private void setChatRoomObserver() {
// 处理新收到的消息
incomingChatRoomMsg = new Observer<List<ChatRoomMessage>>() {
@Override
public void onEvent(List<ChatRoomMessage> messages) {
displayReceivedMessages(messages); 主要在这个方法中处理
}
};
NIMClient.getService(ChatRoomServiceObserver.class)
.observeReceiveMessage(incomingChatRoomMsg, true);
}
private void displayReceivedMessages(List<ChatRoomMessage> messages) {
if (closeChatroom) {
for (ChatRoomMessage message : messages) {
String tmpText = "";
String nickName = message.getChatRoomMessageExtension().getSenderNick(); 这里就可以得到进入聊天室携带的昵称 也就是消息的昵称
String avatar = message.getChatRoomMessageExtension().getSenderAvatar(); 图像
// String targetAccid=message.get
Map<String, Object> map = message.getChatRoomMessageExtension().getSenderExtension(); 扩展字段
if (message != null && message.getAttachment() instanceof ChatRoomNotificationAttachment) {//通知消息
getNotificationMsg(message, tmpText);
} else if (message != null && message.getAttachment() instanceof CustomTextAttachment) {//文本消息
getTextMsg(message, nickName, avatar);
} else if (message != null && message.getAttachment() instanceof CustomGiftAttachment) {//礼物消息包括礼物,红包,优惠券
getGiftMsg(message, nickName, avatar, map);
} else if (message != null && message.getAttachment() instanceof CustomLikeAttachment) {
} else if (message != null && message.getAttachment() instanceof CustomSystemAttachment) {
} else {
} 根据消息类型做处理
}
}
}
//监听是否被提出聊天室
private void setKickOutClassRoom() {
Observer<ChatRoomKickOutEvent> kickOutObserver = new Observer<ChatRoomKickOutEvent>() {
@Override
public void onEvent(ChatRoomKickOutEvent chatRoomKickOutEvent) {
// 提示被踢出的原因(聊天室已解散、被管理员踢出、被其他端踢出等)
// 清空缓存数据
}
};
NIMClient.getService(ChatRoomServiceObserver.class)
.observeKickOutEvent(kickOutObserver, true);
} 如果被踢出聊天室或者直播结束聊天室解散可以在这里监听并做处理
private void leaveChatRoom() {
NIMClient.getService(ChatRoomServiceObserver.class)
.observeReceiveMessage(incomingChatRoomMsg, false);
NIMClient.getService(ChatRoomService.class).exitChatRoom(chatroomid);
} 离开聊天室 这是在ondestroy 里面做的 没有回调
发消息可以在直播聊天室中找到