Android / XMPP:状态监听器忽略/丢弃UNAVAILABLE状态

时间:2011-09-28 09:49:25

标签: android xmpp chat smack asmack

我正在尝试使用smack / asmack xmpp库在Android上建立一个简单的xmpp群聊。基本上一切都在工作,除了:UNAVAILABLE存在,即当用户离开聊天室时,似乎被忽略了。用户进入群聊的情况很好。

我的本​​地Openfire服务器以及xmpp客户端(Instantbird)都告诉我,当用户离开时,存在UNAVAILABLE存在。只有我的东西有麻烦。

这是我的代码的主要代码段。简而言之,当用户(重新)进入房间时,我看到控制台输出(“presenceListener.processPacket”),当用户没有任何事情发生时。

public boolean join(String room, user) {

    this.chat = new MultiUserChat(this.xmppConn, room);

    this.presenceListener = new PacketListener() {
        @Override
        public void processPacket(Packet packet) {
            System.out.println("presenceListener.processPacket");
            if (packet instanceof Presence)
                // Handle presence
        }
    };
    this.chat.addParticipantListener(this.presenceListener);

    this.messageListener = ...
    this.chat.addMessageListener(this.messageListener);
    ...
    try {
        this.chat.join(user);
        ...
    } catch (...) {
        ...
    }
}

我会理解听众何时不会接受任何事情。但这对我来说太奇怪了。我对任何暗示感到高兴...谢谢!

基督教

1 个答案:

答案 0 :(得分:0)

我找到了一个有效的解决方案here

它使用PacketFilter和存在数据包的过滤器,将其附加到xmpp连接;通过将ParticipantListener附加到MultiUserChat来解决我的解决方案。

我仍然不知道为什么我的原始尝试失败了,但是......嗯......它现在有效。