无法从邮件接收扩展名

时间:2013-08-28 04:08:10

标签: android smack asmack

通过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>

您可以看到日期戳为空。我正在使用Flowdalic的Asmack Library(https://github.com/flowdalic/asmack) 请帮我。这是图书馆的问题吗?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

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

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

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

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

然后在Smack

packet.getPacketID.subString(0, timeLength)