2016-05-30 11 views
3

Smack Präsenz Listener in Multi-User-Chat nicht angerufen werden. Verwendete Smack Api zum Anmelden und dann hinzugefügt roster.addRosterListener (mRoasterListener); konnte jedoch keinen Erfolg erzielen, wenn die Anwesenheit eines anderen Benutzers des Chatrooms sich ändert. Ich habe versucht, folgenden Code die Anwesenheit Zuhörer an der Arbeit:Smack Präsenz Listener in Multi-User-Chat

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

und diese Klasse für Anwesenheits-Änderung zu hören ...

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

ich viele Links zur Verfügung von Stackoverflow versucht, aber konnte keinen Erfolg bringen . Bitte Hilfe!

+0

Ich versuchte diese Links, aber nicht zur Arbeit: http://StackOverflow.com/Questions/17991739/smack-rosterlistener-not-working-in-android –

Antwort

2

Für Multi User Chat müssen Sie nicht Roster verwenden, da es normal ist, Leute zu treffen, die Sie nicht in Roster haben.

zu wissen, wer in einem muc ist, zuerst für die Insassen fragen:

muc.join(user,password); 

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

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

dann, Occupants Liste aktuell zu halten, eine DefaultParticipantStatusListener zu Ihrem muc registrieren und definieren, dass Listner:

muc.addParticipantStatusListener(new CustomParticipantStatusListner()); 

definiert als (es gibt viele Methoden zu implementieren, wenn Sie benötigen):

All dies mit Smack 4.1.7

+0

Vielen Dank, es funktioniert fein .. –

+0

Ich bin das gleiche, nur Join-Methode wird aufgerufen, wenn Benutzer beitreten, aber wenn Benutzer verließ das Zimmer verließ nicht aufgerufen .... können Sie bitte helfen –

Verwandte Themen