1

使用带有 smack 库的 MucLight XEP 开发聊天 APP Group 功能,问题是我能够成功地将消息发送到组但是当它来听消息时我很困惑,在 smack 库中我们有

 multiUserChatLight.addMessageListener (new MessageListener ( ) {
                @Override
                public void processMessage(Message message) {

                }
            });

但是它的组特定侦听器,意味着它只侦听多用户聊天参考组,这有些不是我需要的,因为每当我重新连接聊天服务器时,我都需要针对我参与的每个组注册这个侦听器,这不是好意见。另一种方法是注册packetlistener ,这在某些情况下也没什么问题,比如作为群组成员,我收到了我发送到群组的消息,

那么有什么替代方案吗?

有人能告诉我哪里错了吗?

4

1 回答 1

0

每当您连接服务器并进行身份验证时,您都需要注册消息监听器。我已经使用 StanzaListener 添加 MucLight 侦听器。

  public RegisterXmppListener registerXmppListener;

  public void registerMessageListener(){
    debugLog("registerMessageListener");
    if(mStanzaListener !=null)
        connection.removeSyncStanzaListener(mStanzaListener);

    StanzaTypeFilter filter = new StanzaTypeFilter(Message.class);

    mStanzaListener=new StanzaListener() {
        @Override
        public void processStanza(Stanza stanza) throws SmackException.NotConnectedException, InterruptedException {
            if(registerXmppListener!=null) {
                registerXmppListener.onMessageReceived(stanza);
            }
        }
    };
    connection.addSyncStanzaListener(mStanzaListener, filter);
}

registerMessageListener 在您通过服务器身份验证后注册。

于 2017-11-28T10:58:10.150 回答