0

通过 smack 发送消息时出现问题。我处理了来自发件人设备的 xml,它是:

<message id="qOP8c-14" to="52812" from="59271" type="chat"><body>dgggxhhhd</body><thread>52812</thread><datestamp xmlns="jabber:client">2013-08-28T03:59:41Z</datestamp></message>

接收设备中的 xml 是:

<message id="zqy34-12" to="59271@xmpp.gopaktor.com" from="59270" type="chat"><body>rmhxmxt,jxtj,dtj,</body><thread>59271</thread><datestamp xmlns="jabber:client"></datestamp></message>

你可以看到 datestamp 是空的。我正在使用 Flowdalic 的 Asmack 库(https://github.com/flowdalic/asmack)。
请帮我。是图书馆的问题吗?

4

2 回答 2

1

正如该线程所解释的(https://stackoverflow.com/a/11141819/474002):时间戳不是常规消息的一部分。因此,您无法提取它。

我认为您可以发送一个自定义数据包(使用PacketExtension)来扩展您的消息数据包以包含时间戳信息。

Message message = new Message();
DefaultPacketExtension yourExt = new DefaultPacketExtension("your_ext", "com:your:ext");
yourExt.setValue("timestamp", YOUR_TIMESTAMP);
messgae.addExtension(yourExt);
于 2013-09-01T08:42:55.463 回答
0

我实施的一个简单解决方案(仅当您的用户都在使用您的客户端时才有效)是在 ID 前面的数据包 ID 中包含时间戳(还包括一些其他字符串以减轻冲突)。

以毫秒为单位的 Java 时间将是 13 个字符,直到 2200 左右,因此您可以获得前 13 个字符,甚至是面向未来的;

int timeLength String.valueOf(System.currentTimeMillis()).length()

将为您提供数据包 ID 中时间戳的长度

然后在 Smack

packet.getPacketID.subString(0, timeLength)
于 2013-09-03T03:35:07.500 回答