我发送以下请求,使用Android中的smack库从ejabbered服务器获取以下用户的LastActivity(上次看到状态)。
try {
Packet pk = new Packet() {
@Override
public String toXML() {
// TODO Auto-generated method stub
return "<iq from='" + Utils.createJabberUserIdByUserId(me.getUserId()) + "'" + " id='last1' "
+ " to='" + Utils.createJabberUserIdByUserId(friendId) + "' " + " type='get'> "
+ "<query xmlns='jabber:iq:last'/>" + "</iq>";
}
};
ConnectionManager.getInstance().getXmppConnection().sendPacket(pk);
} catch (Exception e) {
// TODO: handle exception
}
我从服务器获得的结果是:
<iq from="272@jabber.com">
id="last1"
to="274@jabber.com/64faf3314bee33c4"
type="result"
</iq>
但结果应该是这样的:
<iq from='272@jabber.com'
id='last1'
to='274@jabber.com/64faf3314bee33c4'
type='result'>
<query xmlns='jabber:iq:last' seconds='903'/>
</iq>
我做错了什么?请帮忙。
答案 0 :(得分:2)
如果你没有在Smack中获得IQ的那个孩子XML,通常表明没有query
/ jabber:iq:last
扩展名的提供者。您必须向提供商经理注册提供商。
顺便说一下,我建议使用offical aSmack version,这会自动完成。
答案 1 :(得分:0)
您可以使用Smack的方法根据上次活动获取用户的最后时间戳。 试试这个:
LastActivityManager lastactivity =
LastActivityManager.getInstanceFor(MyXMPPconnection);
LastActivity result = lastactivity.getLastActivity(JID); // user jid
Log.d("Last seen",result.lastActivity");
在log-cat中打印一个长号。您可以将其转换为年,月,日,小时等。 您可以通过以下方式获得确切的时间戳:
long current-millis = System.currentTimeMillis() - result.lastactivity;