Как узнать статус ввода в разговоре 1: 1 в Smack 4.2 на Android?

Я создаю приложение для чата в Android. Я отправляю и получаю сообщение, но не знаю, как узнать статус другого пользователя и статус ввода беседы.

Я читал, чтобы использовать ChatManagerLister, но в этой версии он устарел.

В Smack 4.2 класс ChatManager не имеет методов для прослушивания состояний чата.


person jamarfal    schedule 22.09.2017    source источник
comment
stackoverflow.com/questions/33479355/   -  person Sarthak Mittal    schedule 22.09.2017
comment
Спасибо за ответ @Sarthak Mittal, но я не вижу возможного решения. Класс MessageEventManager находится в устаревшем режиме в Smack.   -  person jamarfal    schedule 22.09.2017
comment
Я буду правильно обновлять свой ответ по указанной ссылке через день или два, сейчас немного занят! :)   -  person Sarthak Mittal    schedule 22.09.2017
comment
Кстати, я вручную добавил syncStanzaListener для прослушивания изменений статуса ввода, а также отправил его вручную, я уже разместил соответствующий код Rx для изменения статуса ввода в приведенной выше ссылке! :)   -  person Sarthak Mittal    schedule 22.09.2017
comment
Ок, заранее спасибо!! я подожду   -  person jamarfal    schedule 22.09.2017
comment
Что-то вроде этого: stackoverflow.com/a/38975804/3556483??   -  person jamarfal    schedule 22.09.2017
comment
да очень похоже на это! :)   -  person Sarthak Mittal    schedule 22.09.2017


Ответы (1)


Привет, использовал протокол chatstates ejabberd для ввода статуса. прочтите этот документ, возможно, он будет вам полезен XEP-0085: уведомления о состоянии чата

Для стороны 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;
                }
person Sagar Jethva    schedule 20.11.2017