2015-07-23 2 views
1

я создаю XMPP клиента на Android-чат с сервером asmack library и Openfire.Получение Наличие отсутствует, состояние нуль все реестра

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

Ниже мой код, как я создаю список и проверяю наличие?

установки Присутствие

Presence presence = new Presence(Presence.Type.available); 
presence.setStatus("I’m available"); 
connection.sendPacket(presence); 

Получить Roster список и проверить на наличие

Collection<RosterEntry> entries = roster.getEntries(); 
Log.e("Roster Entries","Roster Entries"+entries); 
//loop through 
for (RosterEntry entry : entries) { 
    //example: get presence, type, mode, status 
    Presence entryPresence = roster.getPresence(entry.getUser()); 
    Presence.Type userType = entryPresence.getType(); 
    Presence.Mode mode = entryPresence.getMode(); 
    String status = entryPresence.getStatus(); 
    int state = retrieveState_mode (entryPresence.getMode()   ,entryPresence.isAvailable()); 
    Log.e("Presence Status","Presence status "+entryPresence.toString()+" type "+userType+" mode "+mode+" status "+status+" state "+state); 
} 

retriveState_mode()

public static int retrieveState_mode(Presence.Mode userMode, boolean isOnline) { 
    int userState = 0; 
    /** 0 for offline, 1 for online, 2 for away,3 for busy*/ 
    if(userMode == Presence.Mode.dnd) { 
     userState = 3; 
    } else if (userMode == Presence.Mode.away || userMode == Presence.Mode.xa) { 
     userState = 2; 
    } else if (isOnline) { 
     userState = 1; 
    } 
    return userState; 
} 

В журнале я получаю это:

Roster Entries﹕ Roster Entries[tusha: tusha, tushar: tushar] 
Presence status unavailable type unavailable mode null status null state 0 
Presence status unavailable type unavailable mode null status null state 0 

ответ

0

Как мой опыт, прежде чем вы можете увидеть статус и других от присутствия необходимо оформить подписку на пользователе.

например: пользователь хочет видеть статус и доступный статус от пользователя B, , в этом случае пользователь A должен подписаться на пользователя B. после этого пользователя A может видеть пользователя B Presence.

Подписаться Code

try { 
      roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.manual); 
      String userName = responders.getUsers().get(i).getUsername(); 
      roster.createEntry("[email protected]", userName, null); 
      Presence pres = new Presence(Presence.Type.subscribe); 
      pres.setFrom("[email protected]"); 
      connection.sendStanza(pres); 
     } catch (Exception e) { 
      android.util.Log.e("tag", "unable to add contact: ", e); 
     }