多用户聊天中的smack状态侦听器 [英] smack presence listener in multi user chat

查看:301
本文介绍了多用户聊天中的smack状态侦听器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

即时状态监听器没有被调用.使用Smack Api登录,然后添加了 roster.addRosterListener(mRoasterListener); ,但是当聊天室的其他用户的状态发生变化时,无法成功收听.我尝试了以下代码来使状态侦听器正常工作:

smack presence listener in multi user chat not getting called. Used Smack Api to login and then added roster.addRosterListener(mRoasterListener); but could not get any success to listen when presence of other user of the chat room changes. I tried following code to get the presence listener to work :

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

和这个类来监听状态更改...

and this class to listen for presence change...

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可用的链接,但未获得任何成功. 请帮忙!

I tried many links available by stackoverflow but could not get any success. Please Help!

推荐答案

对于多用户聊天,您不必使用花名册,因为结识您在花名册中没有的人是很正常的.

For Multi User Chat you don't have to use Roster, because it's normal to meet people you don't have in Roster.

要知道谁在muc中,请先询问居住者:

To know who is in a muc, first ask for occupants:

muc.join(user,password);

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

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

然后,要使占领者"列表保持更新,请向您的muc注册一个DefaultParticipantStatusListener并定义该Listner:

then, to keep Occupants list updated, register a DefaultParticipantStatusListener to your muc and define that Listner:

muc.addParticipantStatusListener(new CustomParticipantStatusListner());

定义为(如果需要,有许多方法可以实现):

definied as (there are many methods to implement if you need):

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

所有这些都带有点子4.1.7

All this with smack 4.1.7

这篇关于多用户聊天中的smack状态侦听器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆