未调用 XEP-0022 的 SMACK 消息侦听器

Posted

技术标签:

【中文标题】未调用 XEP-0022 的 SMACK 消息侦听器【英文标题】:SMACK Message Listener for XEP-0022 does not get called 【发布时间】:2011-09-21 08:48:28 【问题描述】:

我无法接收 XMPP 消息,我正在使用以下代码:

    Message mess = new Message() 
           @Override
           public String toXML() 
           return "<message to='user@50.17.86.32' id='message22'><body>Great    Mesg</body><x xmlns='jabber:x:event'><offline/><delivered/><composing/></x></message>";
          
    ;


    PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
    connection.sendPacket(mess);
    connection.addPacketListener(new PacketListener() 
            public void processPacket(Packet packet) 
              Message message = (Message) packet;
              Log.d("Recv", "Message: " + message.toXML());
          
    , filter);

基本上,我正在使用 SMACK 的补丁版本 for android....并尝试使用 xep 0022 获取消息状态。

【问题讨论】:

到底出了什么问题?对问题进行更详细的描述。此外,您只接受了 17% 的问题的答案。如果您没有得到任何好的答案,那没关系,但您可能想回顾一下您过去提出的问题,如果有好的答案,请单击最佳答案旁边的复选标记/打勾。这会鼓励人们回答您未来的问题。 问题没有以正确的方式回答..所以这是一个问题......在这个问题中,我没有在控制台上收到消息,在调试模式下我可以看到消息正在发送,但 smack 不是列出消息。请指导我... 【参考方案1】:

我认为您的过滤器是您的问题的原因。如果您的传入消息没有定义 type='chat' 属性,那么它们将是 Message.Type.normal 类型。我当然只是猜测,因为您没有发布传入的消息,但您发送的消息不包含类型。

您可能只想创建一个 ChatManagerListener 并将其注册到 ChatManager。这将处理这种情况。

注意:您知道 XEP-0022 已经过时了吧?

【讨论】:

是的……你说得对……谢谢罗宾。但我不知道 0022 已经过时了,所以哪一个是与该功能相似的最新 XEP。 XEP-0085 和 XEP-0184

以上是关于未调用 XEP-0022 的 SMACK 消息侦听器的主要内容,如果未能解决你的问题,请参考以下文章

smack 数据包侦听器和消息侦听器之间的区别

Smack 数据包侦听器未运行

使用 smack 的多用户聊天没有收到消息侦听器

在 xmpp smack 库中收到两次消息

如何在消息侦听器中更新 ListView?

XMPP 上的未读消息计数