Могу ли я получить онлайн-пользователей в списке друзей через Smack?

Могу ли я получить онлайн-пользователей в списке друзей через Smack API? Является ли это возможным?

Я работаю над приложением, в котором есть чат между пользователями. Я успешно создал пример приложения чата, просто введя имя друга и отправляю чат, но теперь я хочу онлайн-список друзей.

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 только в этом случае, когда петух увидит этих созданных пользователей.

К записи пользователя с использованием списка используйте следующий код:

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