Как отправить и прослушать пользовательский пакет присутствия xmpp с помощью asmack библиотеки

Я изо всех сил пытаюсь слушать обновление контактов VCard. Я пытаюсь сделать это, отправив пользовательское присутствие, которое несет некоторую пользовательскую информацию при обновлении VCard. Из результатов отладки я обнаружил, что всякий раз, когда такое пользовательское присутствие отправляется, его контакт получит строфу присутствия. К сожалению, когда пакетный прослушиватель контакта не может обнаружить входящий пакет, а затем кажется, что все прослушиватели, добавленные к соединению, были удалены, то есть другой пакет, который может быть обнаружен ранее, не может быть прослушан, хотя отладка все еще работает хорошо. некоторые из моих фрагментов кода так же, как это:

// to update VCard
 mVCard.load(mXMPPConnection);
        mVCard.setField(XmppUserInfo.tagHeadIcon, userInfo.getHeadIconUrl());
        mVCard.setField(XmppUserInfo.tagGender, userInfo.getGender());
        mVCard.setField(XmppUserInfo.tagNickname,userInfo.getNickname());
        mVCard.setField(XmppUserInfo.tagAccount, userInfo.getAccount());
        mVCard.setField(XmppUserInfo.tagSignnature, userInfo.getSignnature());
        mVCard.save(mXMPPConnection);


 // to send custom presence to subscribers to renew infomation
            Presence presence = new Presence(Type.available);
            presence.addExtension(new UserInfoExtension(userInfo));
            mXMPPConnection.sendPacket(presence);

и мой Слушатель выглядит так:

//add Listener  

PacketListener packetListener = new PacketListener() {

            @Override
            public void processPacket(Packet packet) {
                if(null != packet){
                    Log.i(TAG,"UserInfo is being updated" );
                    Log.i(TAG, "the packet is " +packet.toXML());

                    }
                }
            }
        };
        xmppConnection.addPacketListener(packetListener, new PacketFilter() {

            @Override
            public boolean accept(Packet p) {
                return true;
            }
        });

но я не могу сказать, что строка prescen в журнале, хотя я могу получить присутствие из вывода отладки. Кто-нибудь может мне помочь? большое спасибо.

полученное присутствие выглядит следующим образом:

<presence id="AL4As-4" from="20298509@openfire/ad9a8862" to="20298468@openfire">
<user xmlns="kascend:video:xmpp:userinfo">
<info account="133787245" gender="f" signnature="wwwwwww" nickname="bbbb"/>
</user>
<c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://www.igniterealtime.org/projects/smack/" ver="O1jiM4C3yPnCFLp9hBZUn4AgVXs="/></presence>

person gothion    schedule 16.01.2013    source источник


Ответы (1)


Мне жаль вводить вас в заблуждение. в конце концов выясняется, что проблема вызвана ошибкой в ​​моем провайдере расширений, что может привести программу к бесконечному циклу. Я исправил эту ошибку, и теперь все работает нормально.

person gothion    schedule 22.01.2013