更新时间: 2021-03-08
# 设置状态监听
当 SDK 与融云服务器的连接状态发生变化时,开发者可通过下面方法进行处理。
# 参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
listener | ConnectionStatusListener (opens new window) | 是 | 连接状态变化的监听器 |
# 代码示例
RongIM.setConnectionStatusListener(new ConnectionStatusListener() { /** * 连接状态返回回调 * @param status 状态值 */ @Override public void onChanged(ConnectionStatus status) { } });
已复制
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
状态值详细可查看 ConnectionStatus (opens new window)
# 设置消息监听
当 SDK 在接收到消息时,开发者可通过下面方法进行处理。 SDK 会通过此方法接收包含 单聊、群聊、聊天室、系统类型 的所有消息.
- 建议在 Application 中注册消息监听.
- 在 Activity 中注册消息监听. 当 Activity 被释放回收后,将无法收到回调.
# 参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
listener | OnReceiveMessageWrapperListener (opens new window) | 是 | 接收消息的监听器 |
注意事项
- 接收消息注意:
(1) 针对接收离线消息时,服务端会将200条消息打成一个包发到客户端,客户端对这包数据进行解析。
(2) hasPackage 标识是否还有剩余的消息包,left 标识这包消息解析完逐条抛送给 App 层后,剩余多少条。
- 如何判断离线消息收完:
(1) hasPackage 和 left 都为 0;
(2) hasPackage 为 0 标识当前正在接收最后一包(200条)消息,left 为 0 标识最后一包的最后一条消息也已接收完毕。
# 代码示例
RongIM.setOnReceiveMessageListener(new RongIMClient.OnReceiveMessageWrapperListener() { /** * 接收实时或者离线消息。 * 注意: * 1. 针对接收离线消息时,服务端会将 200 条消息打成一个包发到客户端,客户端对这包数据进行解析。 * 2. hasPackage 标识是否还有剩余的消息包,left 标识这包消息解析完逐条抛送给 App 层后,剩余多少条。 * 如何判断离线消息收完: * 1. hasPackage 和 left 都为 0; * 2. hasPackage 为 0 标识当前正在接收最后一包(200条)消息,left 为 0 标识最后一包的最后一条消息也已接收完毕。 * * @param message 接收到的消息对象 * @param left 每个数据包数据逐条上抛后,还剩余的条数 * @param hasPackage 是否在服务端还存在未下发的消息包 * @param offline 消息是否离线消息 * @return 是否处理消息。 如果 App 处理了此消息,返回 true; 否则返回 false 由 SDK 处理。 */ @Override public boolean onReceived(Message message, int left, boolean hasPackage, boolean offline) { return false; } });
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 移除消息监听
当不再需要监听消息时,可调用下面的方法移除监听器,避免内存泄露。
# 参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
listener | OnReceiveMessageWrapperListener (opens new window) | 是 | 接收消息的监听器 |
# 代码示例
RongIMClient.OnReceiveMessageWrapperListener mListener = new RongIMClient.OnReceiveMessageWrapperListener() { @Override public boolean onReceived(Message message, int left, boolean hasPackage, boolean offline) { //... return false; } }; public void removeListener() { RongIM.removeOnReceiveMessageListener(mListener); }
已复制
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11