如何在Android中的Smack 4.2中以1:1的对话了解输入状态?

时间:2017-09-22 12:22:55

标签: android xmpp smack

我正在Android中构建聊天应用程序。我发送和接收消息,但我不知道如何知道对话的其他用户状态和输入状态。

我一直在阅读使用ChatManagerLister,但在此版本中已弃用。

在Smack 4.2中,ChatManager类没有监听聊天状态的方法。

1 个答案:

答案 0 :(得分:0)

您使用chatstates ejabberd协议进行输入状态。请阅读此文档可能对您有用XEP-0085: Chat State Notifications

对于android方面,你需要实现以下代码

    Message msg= (Message) stanza;

    // below ChatStateExtension for Compossing message.
            ChatStateExtension state = (ChatStateExtension)msg.getExtension("http://jabber.org/protocol/chatstates");//jabber:x:event
            // if state (ChatStateExtension) !=null and is composing then call listener method if not error.
            if(state!=null) {
                Log.d(AppConstants.ELEMENT,"ChatStateExtension : " + state.toXML());
                if (state.getElementName().equals("composing")) {
                    if (msg.getType().equals(Message.Type.error)) {
                        return;
                    }

                    if (iCallBackForTypingListener != null) {
                        DelayInformation timestamp = (DelayInformation) msg.getExtension("delay", "urn:xmpp:delay");
                        if (timestamp == null)
                            timestamp = (DelayInformation) msg.getExtension("x", "jabber:x:delay");

                        if (timestamp != null && timestamp.getReason().equalsIgnoreCase("Offline Storage")){ //return if delay info is Offline Storage
                            return;
                        }


        //update your typing listener
    iCallBackForTypingListener.onTypingStanza(fromJID, typingSender);
                    }
//  xmpp.updateChatState(fromJID, state.getElementName(), sender);
                    return;
                } else if (state.getElementName().equals("paused")) {
                    return;
                }