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

后端 未结 5 494
自闭症患者
自闭症患者 2020-12-14 12:39

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 applicatio

相关标签:
5条回答
  • 2020-12-14 12:59

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

    0 讨论(0)
  • 2020-12-14 13:02
    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();
              }
          }
    });
    
    0 讨论(0)
  • 2020-12-14 13:09
        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.

    0 讨论(0)
  • 2020-12-14 13:13
    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());
    }
    
    0 讨论(0)
  • 2020-12-14 13:16
    Presence presence = roster.getPresence("tom@jabber.org");
    if (presence.getType() == Presence.Type.AVAILABLE) {
       // Tom is online...
    }
    

    reference from this link

    0 讨论(0)
提交回复
热议问题