asmack - 接收自定义 XML 消息 ||

Posted

技术标签:

【中文标题】asmack - 接收自定义 XML 消息 ||【英文标题】:asmack - receiving custom XML messages || 【发布时间】:2012-01-19 23:22:44 【问题描述】:

我花了一些时间在 android 设备中添加 smack.providers,我的应用程序很好地接收了它。我添加了默认的 iqProviders 和 extensionProviders,但我也添加了我的自定义 extensionProvider,如下所示:

<extensionProvider>
  <elementName>players</elementName>
  <namespace>boxer:players</namespace>
  <className>company.games.boxer.PlayerListProvider</className>
</extensionProvider>

让我还介绍一下 PlayerListProvider 类,它目前只是为了看看它是否会被调用(它不会)——当我知道它被调用时,我会完全实现它,因此至少部分功能有效:

import java.util.List;
import java.util.Map;

import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smackx.provider.EmbeddedExtensionProvider;

import android.util.Log;

@SuppressWarnings("deprecation")
class PlayerListProvider extends EmbeddedExtensionProvider 
  protected PacketExtension createReturnExtension(String currentElement, String currentNamespace, Map<String,String> attributeMap, List<? extends PacketExtension> content) 
    Log.w("***** AAAAAAAAAAAAAAAAAAAA *******", "0");
    return new XMLPlayerList();
  





class XMLPlayerList implements PacketExtension 

  public String getElementName() 
    return "aaaaa";
  

  public String getNamespace() 
    return "aaaaa";
  

  public String toXML() 
    return "aaaaa";
  


当我运行客户端 android 应用程序时,我收到以下消息:

<message to="eee@localhost" type="chat" id="9" from="admin@localhost">
  <body>
    &lt;players xmlns="boxer:players" command="playerlist"&gt;
      &lt;player&gt;test1&lt;/player&gt;
      &lt;player&gt;test2&lt;/player&gt;
    &lt;/players&gt;
  </body>
  <thread>3P0i00</thread>
</message>

我现在的问题是,为什么没有在收到消息时调用 PlayerListProvider (EmbeddedExtensionProvider)。该消息包含标签并具有 boxer:player 的命名空间,正如我在 smack.providers 中指定的那样。

有什么想法吗?

【问题讨论】:

你是如何解决你的问题的?可以分享一下吗 【参考方案1】:

在阅读了关于 SO 的类似问题后,我遇到了这个 question/answer 和这个 blog post about another way (part 1) (part 2) 来实现自定义消息发送/接收。

您是否考虑过使用PacketExtensionProvider 代替EmbeddedExtensionProvider?

如果您有兴趣尝试代替EmbeddedExtensionProvider,它会更详细地解释here。它可能不是您正在寻找的...(看起来它需要更多的手动解析方法,)但它可能会识别您的 PlayerListProvider 类(通过扩展 PEPEvent 类。)

【讨论】:

嗨。当然,我这样做了,而不是通过 .addExtensionProvider,我使用了 smack.providers 文件,它实际上是相同的,只是采用 XML 文件格式。所以这不是问题的解决方案,因为它没有解决我的问题,我也没有更接近解决我的问题,显然你没有付出很多努力来产生你的答案。 我用不同的可能答案编辑了我的帖子。只是想提供帮助……因为还没有其他人对此发表过想法。 :)

以上是关于asmack - 接收自定义 XML 消息 ||的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 上使用 aSmack 发送和接收自定义 XMPP IQ

Android aSmack - 如何为文件发送自定义消息扩展名?

Android中实现自定义XMPP消息包收发

Android中实现自定义XMPP消息包收发

Android中实现自定义XMPP消息包收发

如何在消息 asmack/smack 中添加其他数据?