如何使用smack库从ejbbered服务器获取LastActivity?

时间:2014-08-05 06:09:28

标签: android smack

我发送以下请求,使用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>

我做错了什么?请帮忙。

2 个答案:

答案 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;