在 XMPP 服务中,我连接到 xmpp 服务器,一旦建立连接,我将获取我当前所在的所有组,并将消息侦听器添加到每个组。
List<Jid> occupiedRooms = multiUserChatLightManager.getOccupiedRooms(JidCreate.domainBareFrom(ConstantXMPP.XMPPService.MUCLightService));
for (Jid jid : occupiedRooms) {
MultiUserChatLight multiUserChatLight = multiUserChatLightManager.getMultiUserChatLight(JidCreate.entityBareFrom(jid.toString()));
MUCLightRoomConfiguration configuration = multiUserChatLight.getConfiguration();
multiUserChatLight.addMessageListener(new org.jivesoftware.smack.MessageListener() {
@Override
public void processMessage(Message message) {
Log.e("Group message/n content", "" + message.toXML());
if (message.getBody() != null && message.getBody().length() > 0) {
Log.e("Message Sender", message.getFrom().asBareJid().toString());
Log.e("Text Message", message.getBody());
handleGroupTextMessage(message);
}
}
});
}
}
在服务中,这就是我向 muclight 房间添加听众的方式,并且当聊天活动未打开时我会收到消息,即,当用户处于最近的聊天列表活动中时,我会收到消息,但只要我打开聊天活动我没有收到任何数据包或消息,
addMessageListener 方法实际上是把消息监听器放入
Set<MessageListener> messageListeners = new CopyOnWriteArraySet<MessageListener>();
所以这就像处理每个组的所有听众,但我仍然无法让这件事发挥作用