¿Puedo hacer que los usuarios en línea en mi lista de amigos a través de Smack?

StackOverflow https://stackoverflow.com/questions/4665948

  •  10-10-2019
  •  | 
  •  

Pregunta

¿Puedo conseguir usuarios en mi lista de amigos a través de la API Smack? ¿Es posible?

Estoy trabajando en aplicación de chat que tienen entre los usuarios. Había creado con éxito ejemplo aplicación de chat acaba de introducir el nombre de un amigo y chat envío, pero ahora quiero lista de amigos en línea.

¿Fue útil?

Solución

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

Otros consejos

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

        }
    });

Así que al comienzo de su programa de registro que escucha XMPPConnection, normalmente se tarda unos pocos segundos para recibir objeto de conexión. Pero sólo funcionará si va a utilizar creatEntry sólo en ese caso, gallo verán aquellos usuarios creados.

Para la entrada creat utilizando Lista utilizar código siguiente:

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

Yo no utilizó ningún grupo, y con un éxito ver el segundo dispositivo de usuario.

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

referencia de este enlace

Utilice el método presence.getMode() para obtener el modo de usuario. Es el modo de enumeración y su valor puede ser de chat, disponible, ausente, xa, dnd.

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();
          }
      }
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top