2016-12-12 6 views
3

Я работаю с jivesoftware Smack SDk для общения в режиме реального времени. Для создания соединения я использую следующий код,Android с Smack -Как получить список пользователей онлайн?

XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration.builder(); 
    config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled); 

    config.setServiceName("world-pc"); 
    config.setHost(serverAddress); 
    config.setPort(5222); 
    config.setDebuggerEnabled(true); 
    XMPPTCPConnection.setUseStreamManagementResumptiodDefault(true); 
    XMPPTCPConnection.setUseStreamManagementDefault(true); 
    connection = new XMPPTCPConnection(config.build()); 
    XMPPConnectionListener connectionListener = new XMPPConnectionListener(); 
    connection.addConnectionListener(connectionListener); 
    connection.connect(); 
    connection.login("username","password"); 

И его работает удивительно хорошо. Теперь дело в том, что я хочу получить статус онлайн конкретного пользователя или получить список всех пользователей, которые находятся в сети. Я пробовал много решений из переполнения стека, но для меня ничего не работает. Одно из моего решения, которое я пытался есть,

Presence presence = new Presence(Presence.Type.available); 
connection.sendPacket(presence); 
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

Ваш клиент отправляет присутствие? – MrPk

+0

yes..Please проверить отредактированный вопрос –

ответ

2

Присутствие это сделано в TYPE (например: Presence.Type.available или Presence.Type.unavailable) и пользовательский обнуляемый status от пользователя (например, или «Сегодня я счастлив» или «At Work права«Hello World!» Теперь").

Чтобы установить статус, просто установить его перед отправкой:

Presence presence = new Presence(Presence.Type.available); 
presence.setStatus("Online and ready to chat"); 
connection.sendStanza(presence); //or old one: connection.sendPacket(presence) 
+0

Я не хочу устанавливать свой статус .. Я хочу статус других пользователей, И я не нашел какой-либо метод типа «sendStanza» для объекта связи –

+0

Каждый пользователь может установить только свои «Статус», так что в основном, если бы все они установили свой собственный статус, вы сможете получить его как String, но не null. Конечно, вы ДОЛЖНЫ управлять возможностью null как getStatus (проверьте его и установите на ""). Если вы не нашли никакого метода «connection.sendStanza()», просто используйте старый «sendPacket», вы используете старую версию SMACK. – MrPk

+0

Хорошо, позвольте мне попробовать как ваше предложение –

3

Вы можете использовать Presence.Type.subscribe для того, чтобы знать (быть пользователем), статус другого пользователя:

И «another_user» должен подтвердить ваш запрос таким же образом:

+0

и есть ли какой-нибудь слушатель, который слушает изменение статуса пользователя? –

+0

@Jay Vyas try RosterListener – MrPk

Смежные вопросы