如何在android中读取xmpp消息标签的自定义属性?

Posted

技术标签:

【中文标题】如何在android中读取xmpp消息标签的自定义属性?【英文标题】:How to read custom attributes of xmpp message tag in android? 【发布时间】:2014-10-22 20:20:20 【问题描述】:

我需要接收的xml是:

<message id="qm5Dx8" to="adsfxcv" type="chat"from="adsf"
 msgType="2"
 thumbnail="randomThumbnail"
 serverMediaURL="random"
 isFromMe="1"
 status="1"><body>Image</body><request xmlns='urn:xmpp:receipts'/></message>

MyCustomMessage extends Message 类正在发送消息。

在我的消息监听器中,我需要获取数据包的位置是:

            public void processPacket(Packet packet) 
            String recivedPacket = packet.toXML();
            try 
                if (packet instanceof MyCustomMessage) 
                    MyCustomMessage msg = (MyCustomMessage) packet;
                    ....

但我在消息标签中只收到 id、to、type 和 from。并且数据包的实例也是消息的实例,它说,不能将数据包转换为消息。请指导我如何收到我想要的数据包。

【问题讨论】:

【参考方案1】:

你不能。此外,您永远不应该扩展 MessagePresence 类。

永远不要向指定的流元素属性添加自定义值(例如,消息的 type 属性的新值),并且永远不要向***元素添加新属性(就像你对 msgTypemsgTimeStamp 和等等)。

这有可能破坏事物!不要这样做。另见"XEP-0134: XMPP Design Guidelines § 2.1 XMPP is Sacred"。这就是为什么在 Smack 中不可能。相反,使用自定义扩展元素,就像他的示例中显示的 xnyhps(data 元素)。另请参阅 "RFC 6120 § 8.4 Extended Content" 在 Smack 中称为 PacketExtension。

另请参阅this answer 和问题。

【讨论】:

以上是关于如何在android中读取xmpp消息标签的自定义属性?的主要内容,如果未能解决你的问题,请参考以下文章

我们如何在 smack 或来自 android 的 xmpp 中获得对发件人的消息读取/看到确认

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

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

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

如何在 Smack 4.1 中的 XMPP 消息标签中添加自定义属性(昵称)

如何在 android 中编辑和删除 XMPP 中的特定消息?