我现在正在尝试使用Asmack-android-7。首先,我创建了一个即时房间,然后在房间里添加了一个MUC侦听器。代码段如下:
//create the an instant room if the same room has not been created.
MultiUserChat muc = new MultiUserChat(mConnection, roomJid);
muc.create(ownerNickname);
muc.sendConfigurationForm(new Form(Form.TYPE_SUBMIT));
// join a room and add listener
mMuc = new MultiUserChat(mConnection, roomJid);
mMuc.join(vistorNickname);
addListenerToMuc(mMuc);
// the listener function
private void addListenerToMuc(MultiUserChat muc){
if(null != muc){
muc.addMessageListener(new PacketListener() {
@Override
public void processPacket(Packet packet) {
Log.i("processPacket", "receiving message");
}
});
}
}
然后,事情真的会使我感到困惑,首先,有时候听众运作良好,但是当我离开房间然后重新加入时,侦听器可能总是将消息处理为这样的形式:
RCV (723971008): <message id="FdkcR-24" to="寻李白@xjopenfire/KascendVideo" type="groupchat" from="哈特的战争@conference.xjopenfire/nutch"><body> from nutch</body></message>
但是,当这样的消息即将来临时,听众总是可以很好地工作:
<message id="S7JfM-111" to="寻李白@xjopenfire/KascendVideo" type="groupchat" from="哈特的战争@conference.xjopenfire/hangzhou@video"><body>I love you</body><x xmlns="jabber:x:event"><offline/><delivered/><displayed/><composing/></x></message>
似乎具有一个或多个扩展的消息总是很好地工作,而没有扩展的消息有时会失败。我真的对此感到困惑,任何身体都可以告诉我发生了什么吗?我真的很感谢您的想法。
我发现的另一个问题是,如果我首先创建一个即时房间,然后加入房间而无需创建一个新的Mulituserchat对象,那么房间就无法由其他人加入,例如,使用SPARK客户端,然后获得错误,说房间不存在,具体,代码段是这样:
MultiUserChat mMuc = new MultiUserChat(mConnection, roomJid);
muc.create(ownerNickname);
muc.sendConfigurationForm(new Form(Form.TYPE_SUBMIT));
// join a room and add listener
mMuc.join(vistorNickname);
我真的对这些事情感到沮丧,所有想法都受到欢迎。非常感谢。
我对第二个问题有一个简单的解决方案,您不必在创建它后立即加入房间。因为它们确实对某些扩展意味着同一件事,而我上面描述的现象与Smack库的实现()和join()函数有关。