10

我可以通过 Smack API 在我的好友列表中获取在线用户吗?是否可以?

我正在开发用户之间聊天的应用程序。我已经成功创建了聊天应用程序示例,只需输入朋友的姓名并发送聊天,但现在我想要在线朋友列表。

4

5 回答 5

21
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());
}
于 2011-01-12T06:39:09.833 回答
6
    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 时它才会起作用,只有在这种情况下 rooster 才会看到那些创建的用户。

要使用名册创建条目,请使用以下代码:

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

我没有使用任何组,并且成功在第二台设备上看到用户。

于 2014-02-12T12:53:11.987 回答
4
Presence presence = roster.getPresence("tom@jabber.org");
if (presence.getType() == Presence.Type.AVAILABLE) {
   // Tom is online...
}

从此链接参考

于 2012-02-09T13:25:34.487 回答
1

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

于 2011-01-12T12:13:57.457 回答
1
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();
          }
      }
});
于 2015-04-25T13:31:44.980 回答