android - 将自定义 IQProvider 添加到 Asmack 时无法接收新创建的聊天

标签 android xmpp asmack

我正在为我的 android 项目使用 asmack-android-17-0.8.3

我已将 asmack 源代码复制到我的项目中,并且还在 ConfigureProviderManager 类中添加了我的自定义 IQ 提供程序,如下所示:

other extensions and IQ providers...

// XEP-184 Message Delivery Receipts
    pm.addExtensionProvider("received", "urn:xmpp:receipts", new DeliveryReceipt.Provider());
    pm.addExtensionProvider("request", "urn:xmpp:receipts", new DeliveryReceipt.Provider());

    // XEP-0115 Entity Capabilities
    pm.addExtensionProvider("c", "http://jabber.org/protocol/caps", new CapsExtensionProvider());

    // XEP-0136
    pm.addIQProvider("list", "urn:xmpp:archive", new ListIQProvider());

如您所见,在最底下,我添加了 IQProvider 以支持 XEP-0136 中的归档!

现在,当我添加这个时,我可以将存档的聊天数据获取到我的 iq 提供程序,但不幸的是,同时它也使我的客户端无法通过 ChatManager 接收新的聊天!

这仍然是 asmack 中的错误吗?添加自定义 iqprovider 的最佳方式是什么? 请给我建议如何解决这个问题。谢谢!

最佳答案

你有没有从文档中看到这句话“解析 IQ 子文档并创建一个 IQ 实例。每个 IQ 必须有一个子元素。在方法调用开始时,xml 解析器将定位到 IQ 子元素的开始标记处。 在方法调用结束时,解析器必须位于子元素的结束标记上。”?

也许你应该像 smack 内置提供程序 MUCAdminProvider 那样编写你的代码:

boolean done = false;
while (!done) {
        int eventType = parser.next();
        if (eventType == XmlPullParser.START_TAG) {
            if (parser.getName().equals("actor")) {
                item.setActor(parser.getAttributeValue("", "jid"));
            }
            if (parser.getName().equals("reason")) {
                item.setReason(parser.nextText());
            }
        }
        else if (eventType == XmlPullParser.END_TAG) {
            if (parser.getName().equals("item")) {
                done = true;
            }
        }
    }

关于android - 将自定义 IQProvider 添加到 Asmack 时无法接收新创建的聊天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17939182/

相关文章:

java - HandlerThread.getLooper() 无限期阻塞

android - Google Play 没有传递完整的引用字符串?

android - 如何在kotlin中舍入一个数字

ios - 无法使用用户名和密码登录以在 Xmpp 中聊天

ios - XMPP ejabberd SaaS 推送通知

ios - XMPPFramework - XEP-0048 : Bookmark Storage

android - 如何控制android中的多个聊天 Activity ?

android - 键入状态 Smack 4.1

android - 您应用的 AndroidManifest.xml 中的元数据标记没有正确的值

Android Smack XMPP 文件传输始终显示正在进行和状态 0