我花了一些时间在
Android设备中添加smack.providers,我的应用程序很好地接收了它.我添加了默认的iqProviders和extensionProviders,但我还添加了我的自定义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>
- <players xmlns="Boxer:players" command="playerlist">
- <player>test1</player>
- <player>test2</player>
- </players>
- </body>
- <thread>3P0i00</thread>
- </message>
我现在的问题是,为什么在收到消息时没有调用PlayerListProvider(EmbeddedExtensionProvider).该消息包含标记,并具有Boxer:player的命名空间,正如我在smack.providers中指定的那样.
有什么想法吗?
解决方法
在SO上阅读了类似问题之后,我遇到了
question/answer和
blog post about another way(
part 1)(
part 2)来实现自定义消息发送/接收.
您是否考虑过使用PacketExtensionProvider代替EmbeddedExtensionProvider?
如果您有兴趣试用它来代替EmbeddedExtensionProvider,可以在here中更详细地解释它.它可能不是您正在寻找的……(看起来它需要更多的手动解析方法),但它可能会识别您的PlayerListProvider类(通过扩展PEPEvent类.)