Smack 4.2.0 OutgoingChatMessageListener 没有接到任何电话

Posted

技术标签:

【中文标题】Smack 4.2.0 OutgoingChatMessageListener 没有接到任何电话【英文标题】:Smack 4.2.0 OutgoingChatMessageListener is not getting any call 【发布时间】:2018-02-26 14:07:56 【问题描述】:

我使用的是 smack 4.2.0 最新版本,这里 IncomingChatMessageListener 工作正常,但是当我发送消息时 OutgoingChatMessageListener 没有被调用。任何人都可以建议我这是什么问题? 我的代码在下面

ChatManager chatManager = ChatManager.getInstanceFor(mXMPPConn);
EntityBareJid jid = JidCreate.entityBareFrom(mStrJabberID);
Chat chat = chatManager.chatWith(jid);
chatManager.addOutgoingListener(new OutgoingChatMessageListener() 
   @Override
   public void newOutgoingMessage(EntityBareJid to, Message message, Chat chat) 
   
      System.out.format("OUTGOING: %s.\n", message);
   
);

chat.send(strMsg);

【问题讨论】:

奇怪,开启日志试试 我也有同样的问题,如果你解决了问题,请告诉我。 同样的问题..如果您找到了解决方案,请帮助... :( 【参考方案1】:

我追踪了代码,发现这个版本的AbstractJidTypeFilter.class有一个bug。

将您的版本从 Smack 4.2.0 更改为 Smack 4.2.2 应该可以。 希望它能解决你的问题。

【讨论】:

【参考方案2】:

我正在调试 smack 的源代码。您可以尝试以下方法:

    将 FromMode.USER 设置为连接

    connection.setFromMode(XMPPConnection.FromMode.USER);
    

    发送消息前设置消息类型

    message.setType(org.jivesoftware.smack.packet.Message.Type.chat);
    

解释:

    AbstractJidTypeFilter 检查来自jid 的消息是满的还是空的。连接将设置来自jid 的节,默认为null。 (AbstractXMPPConnection.java#sendStanza,第 666 行)

    MessageTypeFilter会检查消息类型是聊天还是正常。

【讨论】:

以上是关于Smack 4.2.0 OutgoingChatMessageListener 没有接到任何电话的主要内容,如果未能解决你的问题,请参考以下文章

hava jabber-bot。 XMPP over smack 4.2.0 with TLS

Smack XMPP android 连接时崩溃

使用 smack 'XMPPError: service-unavailable - cancel' 传输文件失败

线程“主”java.lang.NoSuchFieldError 中的异常:如果可能

Smack 4.1.8 解析失败:Lorg/jivesoftware/smack/tcp/XMPPTCPConnectionConfiguration;

Smack 异常 - 由我的 Java 安装或 Smack 引起