Как да разберете състоянието на писане в разговор 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