全部文档

更新时间: 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

状态值详细可查看 ConnectionStatus (opens new window)

# 设置消息监听

当 SDK 在接收到消息时,开发者可通过下面方法进行处理。 SDK 会通过此方法接收包含 单聊、群聊、聊天室、系统类型 的所有消息.

  1. 建议在 Application 中注册消息监听.
  2. 在 Activity 中注册消息监听. 当 Activity 被释放回收后,将无法收到回调.
# 参数说明
参数 类型 必填 说明
listener OnReceiveMessageWrapperListener (opens new window) 接收消息的监听器

注意事项

  1. 接收消息注意:

(1) 针对接收离线消息时,服务端会将200条消息打成一个包发到客户端,客户端对这包数据进行解析。

(2) hasPackage 标识是否还有剩余的消息包,left 标识这包消息解析完逐条抛送给 App 层后,剩余多少条。

  1. 如何判断离线消息收完:

(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

# 移除消息监听

当不再需要监听消息时,可调用下面的方法移除监听器,避免内存泄露。

# 参数说明
参数 类型 必填 说明
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

文档是否解决您的问题 ?

如果遇到产品相关问题,您可 提交工单 寻求帮助