smack 使用 4.1.0 rc1 在 muc 中接收消息

Posted

技术标签:

【中文标题】smack 使用 4.1.0 rc1 在 muc 中接收消息【英文标题】:smack receive message in muc using 4.1.0 rc1 【发布时间】:2015-04-06 11:13:30 【问题描述】:

谁能告诉我如何使用 Smack 4.1.0 rc1 在 muc 中接收消息?

我可以使用以下代码发送消息。

Message message = new Message();
        message.setType(Message.Type.groupchat);
        message.setBody(strMessage);
        message.setTo(roomJid);
 multiUserChat.sendMessage(message);

我正在使用以下代码,但无法收到消息。

    multiUserChat = multiUserChatManager.getMultiUserChat(roomJid);
    multiUserChat.addMessageListener(new MessageListener() 
        @Override
        public void processMessage(Message message) 
            Log.i(Constant.TAG, "processMessage");
        
    ); 

我的调试已打开,我可以看到应用正在接收消息(D/SMACK(6098): RECV (1): ) 但监听器没有被调用

【问题讨论】:

你读过 Smack 的 MUC 文档吗? @Flow 我已经查看了它,但我没有找到它。 igniterealtime.org/builds/smack/docs/latest/documentation/… @Hitendra 你找到解决方案了吗?我现在已经有这个问题了。 【参考方案1】:

使用MultiUserChat.addMessageListener(MessageListener)

【讨论】:

有人遇到同样的问题吗?【参考方案2】:

在向 muc 添加消息侦听器之前向 muc 发送出席信息/加入。

然后您将收到 muc 消息到侦听器中。

如果不发送出席信息或加入 muc,您无法将消息发送到侦听器,但您可以在 logcat 中看到。

【讨论】:

我已经使用了 addSyncPacketListener 并且我能够做到。我会尝试你的建议并告诉你。【参考方案3】:

我正在使用节侦听器并且能够接收 MUC 消息。

 final  StanzaListener stanzaListener = new StanzaListener() 
        @Override
        public void processStanza(Stanza packet) throws SmackException.NotConnectedException, InterruptedException   .. 


xmppConnection.addAsyncStanzaListener(stanzaListener, StanzaTypeFilter.MESSAGE);

【讨论】:

以上是关于smack 使用 4.1.0 rc1 在 muc 中接收消息的主要内容,如果未能解决你的问题,请参考以下文章

XMPP Smack 4.1.0 rc1 异常重新加载名册

使用 smack 创建 MUC

如何使用 Smack 确定 MUC 是不是存在?

如何使用 SMACK OMEMO 为群聊或 MUC 生成指纹?

Smack MUC 邀请

Android Smack MUC 400 错误请求发送群聊消息