我可以通过Smack在我的朋友列表中获得在线用户吗?

我可以通过Smack API在我的朋友列表中获得在线用户吗? 可能吗?

我正在使用用户之间聊天的应用程序。 我已经成功地创build了聊天应用程序的例子,只是input朋友的名字和发送聊天,但现在我想在线的朋友列表。

Solutions Collecting From Web of "我可以通过Smack在我的朋友列表中获得在线用户吗?"

Roster roster = xmppConnection.getRoster(); Collection<RosterEntry> entries = roster.getEntries(); Presence presence; for(RosterEntry entry : entries) { presence = roster.getPresence(entry.getUser()); System.out.println(entry.getUser()); System.out.println(presence.getType().name()); System.out.println(presence.getStatus()); } 
  XMPPConnection.addConnectionCreationListener(new ConnectionCreationListener() { @Override public void connectionCreated(Connection arg0) { Log.i(TAG, "receive xmpp connection : " + arg0); connection = arg0; roster = arg0.getRoster(); Collection<RosterEntry> entries = roster.getEntries(); Presence presence; Log.e(TAG, "user count" + entries.size()); for (RosterEntry entry : entries) { presence = roster.getPresence(entry.getUser()); Log.i(TAG, "" + entry.getUser()); Log.i(TAG, "" + presence.getType().name()); Log.i(TAG, "" + presence.getStatus()); } } }); 

所以在程序开始的时候注册XMPPConnection监听器,通常需要几秒钟的时间来接收连接对象。 但是只有当你使用creatEntry的情况下,它才能工作,公鸡会看到那些创build的用户。

要使用名册创buildinput,请使用下一个代码:

 try { rooster.createEntry("name", "user_id", null); } catch (XMPPException e) { e.printStackTrace(); } 

我没有使用任何组,并成功地看到第二个设备上的用户。

 Presence presence = roster.getPresence("tom@jabber.org"); if (presence.getType() == Presence.Type.AVAILABLE) { // Tom is online... } 

从这个链接引用

使用presence.getMode()方法获取用户模式。 模式是枚举,它的值可以聊天,可用,离开,XA,DEND。

 smackAndroid = SmackAndroid.init(this); XMPPConnection.addConnectionCreationListener(new ConnectionCreationListener() { @Override public void connectionCreated(XMPPConnection connection) { Log.i("hello", "receive xmpp connection : " + connection); roster = connection.getRoster(); try { roster.createEntry("2868254", "hello", null); } catch (XMPPException e) { e.printStackTrace(); } catch (NotLoggedInException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoResponseException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NotConnectedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } });