监听聊天室事件
聊天室业务为客户端 App 提供三种类型的事件监听器:聊天室状态监听器、聊天室成员变化监听器、聊天室事件通知监听器。通过这三个监听器,客户端 App 可以从融云服务端获取聊天室销毁状态、用户在当前及其他客户端加入退出聊天室的状态、聊天室中成员进出的事件通知、以及聊天室中成员禁言、封禁相关的信息。
参数说明
| 监听器 | 名称 | 说明 |
|---|---|---|
| ChatRoomAdvancedActionListener | 聊天室状态监听器 | 接收在当前客户端登录的用户加入、退出聊天室的事件与聊天室销毁状态的信息。 |
| ChatRoomMemberActionListener | 聊天室成员变化监听器 | 接收当前用户所在聊天室中其他用户加入、退出聊天室的信息。 |
| ChatRoomNotifyEventListener | 聊天室事件通知监听器 | 接收当前所在聊天室中成员禁言、封禁相关的信息;接收当前用户在其他端加入、退出聊天室相关的信息。 |
监听聊天室状态
应用程序可以监听当前客户端上用户加入、退出聊天室的事件与聊天室销毁状态变更。
使用 RongChatRoomClient 的 addChatRoomAdvanceActionListener setChatRoomAdvancedActionListener 添加或设置 ChatRoomAdvancedActionListener 监听器。
示例代码
// addChatRoomAdvanceActionListener,since 5.2.5
RongChatRoomClient.addChatRoomAdvanceActionListener(
new ChatRoomAdvancedActionListener() {
@Override
public void onJoining(String chatRoomId) {
// default implementation ignored
}
@Override
public void onJoined(String chatRoomId) {
// 加入聊天室成功,已废弃
// default implementation ignored
}
@Override
public void onJoined(String chatRoomId, JoinChatRoomResponse joinChatRoomResponse) {
// 加入聊天室成功 since 5.6.3
// default implementation ignored
}
@Override
public void onReset(String chatRoomId) {
// default implementation ignored
}
@Override
public void onQuited(String chatRoomId) {
// default implementation ignored
}
@Override
public void onDestroyed(String chatRoomId, ChatRoomDestroyType type) {
data.setFirstAndNotify(Pair.create(chatRoomId, type));
}
@Override
public void onError(String chatRoomId, CoreErrorCode code) {
// default implementation ignored
}
});
// setChatRoomAdvanceActionListener
RongChatRoomClient.setChatRoomAdvanceActionListener(listener);
移除监听器:
示例代码
// removeChatRoomAdvanceActionListener,since 5.2.5
RongChatRoomClient.addChatRoomAdvanceActionListener(listener);
// setChatRoomAdvanceActionListener
RongChatRoomClient.setChatRoomAdvanceActionListener(null);
聊天室状态事件
下方列出了聊天室操作监听器 ChatRoomAdvancedActionListener 提供的事件列表及回调方法。
参数说明
| 回调方法 | 触发时机 | 说明 |
|---|---|---|
onJoining(String chatRoomId) | 当前用户正在加入聊天室 | 返回数据包括:聊天室 ID |
onJoined(String chatRoomId, JoinChatRoomResponse) | 当前用户已加入聊天室(5.6.3 开始提供)。 | 返回数据包括:聊天室 ID,聊天室房间信息、用户在聊天室的状态。 |
onJoined(String chatRoomId) | 当前用户已加入聊天室(从 5.6.3 开始废弃) | 返回数据包括:聊天室 ID |
onReset(String chatRoomId) | 用户所在聊天室被重置。 | 返回数据包括:聊天室 ID。注意,加入聊天室成功,但是聊天室被重置,接收到此回调后,还会立刻收到 onJoining 和 onJoined 回调。 |
onQuited(String chatRoomId) | 当前用户退出聊天室 | 返回数据包括:聊天室 ID |
onDestroyed(String chatRoomId, IRongCoreEnum.ChatRoomDestroyType type) | 当 前用户在线,且所在聊天室被销毁 | 返回数据包括:聊天室 ID、聊天室销毁类型。聊天室销毁类型为 ChatRoomDestroyType.MANUAL,表示主动调用 IM Server API 销毁聊天室。ChatRoomDestroyType.AUTO 表示聊天室自动销毁。 |
onError(String chatRoomId, IRongCoreEnum.CoreErrorCode code) | 聊天室操作异常 | 返回数据包括:聊天室 ID、错误码。 |
监听聊天室成员变化
SDK 从 5.1.4 版本开始支持监听聊天室成员变化。
从 5.1.4 版本,SDK 开始在 RongChatRoomClient 中提供 ChatRoomMemberActionListener,支持当前登录用户监听所在聊天室中其它成员的加入、退出行为。
开通服务
您可以在融云控制台,在 IM 服务>功能配置>聊天室>聊天室成员变化监听,开启此功能。开启后,用户加入、退出聊天室后,系统会使用消息的方式向聊天室中的其他成员发送回调通知,消息量会因此增加。

设置聊天室成员变化监听器
使用 ChatRoomMemberActionListener 方法设置聊天室成员变化监听器。从 5.6.7 版本 开始,新增返回 ChatRoomMemberActionModel 对象的回调方法,其中增加了当前聊天室人数。
示例代码
RongChatRoomClient.setChatRoomMemberListener(new RongChatRoomClient.ChatRoomMemberActionListener() {
/**
* @param chatRoomMemberActions
* @param roomId
*/
@Override
public void onMemberChange(List<ChatRoomMemberAction> chatRoomMemberActions, String chatRoomId) {
// Handle the member change with the list of ChatRoomMemberAction objects and the chatRoomId
}
/**
* @since 5.6.7
*/
@Override
public void onMemberChange(ChatRoomMemberActionModel model) {
// Handle the member change with the ChatRoomMemberActionModel object
String chatroomId = model.getRoomId();
List<ChatRoomMemberAction> chatRoomMemberActions = model.getChatRoomMemberActions();
int memberCount = model.getMemberCount();
for (ChatRoomMemberAction action : chatRoomMemberActions) {
// Access the properties of ChatRoomMemberAction object
String userId = action.getUserId();
ChatRoomMemberAction.ChatRoomMemberActionType actionType = action.getChatRoomMemberAction();
if (actionType == ChatRoomMemberAction.ChatRoomMemberActionType.CHAT_ROOM_MEMBER_JOIN) {
System.out.println("Action Type: Join");
} else if (actionType == ChatRoomMemberAction.ChatRoomMemberActionType.CHAT_ROOM_MEMBER_QUIT) {
System.out.println("Action Type: Leave");
}
}
}
});
聊天室中有其他用户加入或退出时,SDK 会同时触发两个 onMemberChange 回调方法,都在 UI 线程回调。ChatRoomMemberAction 列表中包含了当前聊天室中加入或退出聊天室的成员信息。ChatRoomMemberActionModel 额外封装了聊天室当前人数(指已加入未退出的人数)。推荐使用返回 ChatRoomMemberActionModel 对象的 onMemberChange 方法。
如果当前用户由于网络原因断开与融云的连接,退出聊天室,则无法监听到断开连接期间的其他成员的加入、退出行为。