2016-05-30 2 views
3

Приятный прослушиватель присутствия в многопользовательском чате, не получивший вызов. Использовал Smack Api для входа в систему, а затем добавил roster.addRosterListener (mRoasterListener);, но не удалось добиться успеха, если изменится присутствие другого пользователя в чате. Я попытался следующий код, чтобы получить присутствие слушателя работать:Приятный прослушиватель присутствия в многопользовательском чате

connection.login(loginUser, passwordUser); 

MultiUserChatManager manager = 

MultiUserChatManager.getInstanceFor(connection); 

muc = manager.getMultiUserChat(roomID + "@" +context.getString(R.string.group_chat_id)); 

Log.d("Join User: ", "Already Created"); 

muc.join(Utilities.getUserPhoneNo(context)); 

muc.addMessageListener(mGroupMessageListener); 

Roster roster = Roster.getInstanceFor(connection);//luna 

roster.addRosterListener(mRoasterListener);//roasterListener 

Log.d("Joined User Phone: ", " " + Utilities.getUserPhoneNo(context)); 

и этот класс, чтобы слушать изменения присутствия ...

public class RoasterListener implements RosterListener{ 
     public RoasterListener(Context context){ 

     } 

     @Override 
     public void entriesAdded(Collection<String> collection) { 

     } 

     @Override 
     public void entriesUpdated(Collection<String> collection) { 

     } 

     @Override 
     public void entriesDeleted(Collection<String> collection) { 

     } 

     @Override 
     public void presenceChanged(Presence presence) { 
      System.out.println("Presence changed: " + presence.getFrom() + " " + presence); 
     } 
    } 

Я пытался много ссылок, доступных на StackOverflow, но не мог получить никакого успеха , Пожалуйста, помогите!

+0

Я пробовал эти ссылки, но не попадал в работу: http://stackoverflow.com/questions/17991739/smack-rosterlistener-not-working-in-android –

ответ

2

Для многопользовательского чата вам не нужно использовать реестр, потому что это нормально, чтобы встречаться с людьми, которых у вас нет в Roster.

Чтобы узнать, кто находится в MUC, первым попросить жильцов:

muc.join(user,password); 

List<String> occupantsAtJoinTime = muc.getOccupants(); 

        for (String occupant : occupantsAtJoinTime) 
        { 
         System.out.println("occupant: "+occupant); 
         //actions 
        } 

затем, чтобы сохранить список Оккупанты обновляется, зарегистрировать DefaultParticipantStatusListener на ваш MUC и определить, что у слушателя:

muc.addParticipantStatusListener(new CustomParticipantStatusListner()); 

(есть много способов реализовать, если вам нужно):

public class CustomParticipantStatusListner extends DefaultParticipantStatusListener 
    { 

     public void joined(String participant) 
     { 
      System.out.println(participant + "just joined MUC"); 
//actions (add occupantsRightNow) 
     } 

     public void left(String participant) 
     { 
      System.out.println(participant + " just left MUC"); 
//actions (remove occupantsRightNow) 
     } 
    } 

Все это с smack 4.1.7

+0

Спасибо большое, его работа fine .. –

+0

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

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