使用 smack 的多用户聊天没有收到消息侦听器
Posted
技术标签:
【中文标题】使用 smack 的多用户聊天没有收到消息侦听器【英文标题】:Multiuser chat using smack not getting message listner 【发布时间】:2016-10-19 05:33:45 【问题描述】:我正在使用 smack 库开发聊天应用程序。我在群聊中有问题。在我的应用程序中,我正在创建组,并且成员是自动加入的。我想在我在组中发送消息时通知所有用户,即使他们没有发起聊天。我的代码如下,我在 init 方法中放置了监听器,但是无法接收消息。
//Initialize
public void init(String userId, String pwd, Context context) throws SmackException.NotConnectedException
this.mUserName = userId;
this.mPassWord = pwd;
this.mContext = context;
sessionManager = new SessionManager(context);
if (userId.contains("@"))
this.mUserName = userId.split("@")[0];
XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder();
configBuilder.setUsernameAndPassword(mUserName, mPassWord);
configBuilder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
configBuilder.setServiceName(XMPPCredential.SERVICE);
configBuilder.setHost(XMPPCredential.HOST);
configBuilder.setPort(XMPPCredential.PORT);
configBuilder.setResource("");
// configBuilder.setDebuggerEnabled(true);
mConnection = new XMPPTCPConnection(configBuilder.build());
PingManager pingManager = PingManager.getInstanceFor(mConnection);
pingManager.setPingInterval(300); // 2.5 min
pingManager.registerPingFailedListener(this);
mChatmanager.getInstanceFor(mConnection).addChatListener(this);
multiUserChatManager = MultiUserChatManager.getInstanceFor(mConnection);
mConnection.addAsyncStanzaListener(this, null);
mConnection.addSyncStanzaListener(this,null);
ReconnectionManager.getInstanceFor(mConnection).enableAutomaticReconnection();
mConnection.addConnectionListener(this);
// Connect with XMPP server
connectConnection(context);
【问题讨论】:
【参考方案1】:每个 MultiUserChat 都需要像这样添加一个 Listener:
MultiUserChat muc = MultiUserChatManager.getInstanceFor(mConnection).getMultiUserChat( mucJid );
muc.addMessageListener(new MessageListener()...);
【讨论】:
如果有多个 Room,我们怎么知道 mucJid? mucJid 在这种情况下会有所不同吗?在我看来,我们需要使用节标签。以上是关于使用 smack 的多用户聊天没有收到消息侦听器的主要内容,如果未能解决你的问题,请参考以下文章