2

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

我的本地 Openfire 服务器和 xmpp 客户端(Instantbird)都告诉我当用户离开时存在不可用的状态。只有我的东西有问题。

这是我的代码的主要片段。简而言之,当用户(重新)进入房间时,我看到控制台输出(“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 (...) {
        ...
    }
}

我会理解什么时候听众什么都听不见。但这对我来说太奇怪了。我很高兴任何提示...谢谢!

基督教

4

1 回答 1

0

我在这里找到了一个可行的解决方案。

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

我仍然不知道为什么我最初的尝试失败了,但是……嗯……现在可以了。

于 2011-10-02T14:10:54.747 回答