全部文档

更新时间: 2021-03-08

# 功能描述

输入消息的时候对方可以看到正在输入的提示,当输入框中有内容变化时,向目标用户发送一条正在输入的状态消息,为防止消息发送频繁 6 秒钟内变化多次时,只发送一条消息。因无法确定用户的输入操作,该功能可能会产生大量状态消息,如不需要此功能可进行关闭。

# 效果展示


# 配置说明

在 IMLib 的 res/value 下的 rc_configuration.xml 文件中设置以下配置, 即可使用输入状态功能. 功能默认关闭.

<!-- 设置发送输入状态 , true 为打开, false 为关闭-->
<bool name="rc_typing_status">true</bool>
已复制
1
2

使用 Maven 集成的, 可在主工程的 res/value 下创建 rc_configuration.xml 文件, 并把上述开关配置复制粘贴到文件中即可. 工程优先加载主工程 rc_configuration.xml 中的配置项.

# 回执监听

融云 SDK 内部已经处理好逻辑,只需要注册监听,在回调里更新标题栏(融云只提供 Fragment ,标题栏的处理需要开发者自己添加)。

在集成了 ConversationFragment的activity 里注册输入状态的监听,您可以在 Activity 的 onCreate() 里添加如下代码。

RongIMClient.setTypingStatusListener(new RongIMClient.TypingStatusListener() {
    @Override
    public void onTypingStatusChanged(Conversation.ConversationType type, String targetId, Collection<TypingStatus> typingStatusSet) {
        //当输入状态的会话类型和targetID与当前会话一致时,才需要显示
        if (type.equals(mConversationType) && targetId.equals(mTargetId)) {
            //count表示当前会话中正在输入的用户数量,目前只支持单聊,所以判断大于0就可以给予显示了
            int count = typingStatusSet.size();
            if (count > 0) {
                Iterator iterator = typingStatusSet.iterator();
                TypingStatus status = (TypingStatus) iterator.next();
                String objectName = status.getTypingContentType();

                MessageTag textTag = TextMessage.class.getAnnotation(MessageTag.class);
                MessageTag voiceTag = VoiceMessage.class.getAnnotation(MessageTag.class);
                //匹配对方正在输入的是文本消息还是语音消息
                if (objectName.equals(textTag.value())) {
                    //显示“对方正在输入”
                    
                } else if (objectName.equals(voiceTag.value())) {
                    //显示"对方正在讲话"
                   
                }
            } else {
                //当前会话没有用户正在输入,标题栏仍显示原来标题
                
            }
        }
    }
});

已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

当对方正在输入时,本端会触发 onTypingStatusChanged(),回调里携带有正在输入的用户列表。

  1. 当对方正在输入时,监听会触发一次;
  2. 当对方不处于输入状态时,该监听还会触发一次,但此时回调里上来的输入用户列表为空,开发者需要在此时取消正在输入的显示,显示原有的标题

文档是否解决您的问题 ?

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