Can I get online users in my friend list via Smack?

牧云@^-^@ 提交于 2019-12-17 22:54:02

问题


Can i get online users in my friend list via Smack API? Is it possible?

I am working on app which have chat between users. I had successfully created chat application example just entering name of friend and send chat, but now I want online friends list.


回答1:


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());
}



回答2:


    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());
            }

        }
    });

So at the start of your program register that XMPPConnection listener, usually it take few seconds to receive connection object. But it will work only if you will use creatEntry only in that case rooster will see those created users.

To creat entry using Roster use next code:

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

I didn't use any group, and with success see user on second device.




回答3:


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

reference from this link




回答4:


Use the presence.getMode() method to get Mode of User. Mode is enum and its value can be chat, available, away, xa, dnd.




回答5:


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();
          }
      }
});


来源:https://stackoverflow.com/questions/4665948/can-i-get-online-users-in-my-friend-list-via-smack

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!