首先获取服务器名val SERVICE_NAME = mMultiUserChatManager.serviceNames
目的是为了获取MultiUserChat这个对象,这里获取的其实是一个数组,然后取第一个元素(也就是我们前面搭建的服务器域名):
val userChat = mMultiUserChatManager.getMultiUserChat(roomName + "@" + SERVICE_NAME[0])
拿到userChat后调用一次create(String nickname)方法:
userChat.create(mUserVo.name)
到这里你肯定以为这就完了,no,no,no,还要进行最后一步:聊天室配置---->>>
created = XMPPConnectionManager.getInstance().configChatRoom(userChat)
这里的created是一个Boolean对象,目的是为了创建成功回调后刷新列表,下面是配置单--->>>
/**
* 配置创建的聊天室信息
*
* @param mUserChat
*/
public boolean configChatRoom(MultiUserChat mUserChat) {
try {
Form form = mUserChat.getConfigurationForm();
Form submitForm = form.createAnswerForm();
List fieldList = form.getFields();
for (int i = 0; i < fieldList.size(); i++) {
FormField field = fieldList.get(i);
if (!FormField.Type.hidden.equals(field.getType())
&& field.getVariable() != null) {
// 设置默认值作为答复
submitForm.setDefaultAnswer(field.getVariable());
}
}
// 设置聊天室是持久聊天室,即将要被保存下来
submitForm.setAnswer("muc#roomconfig_persistentroom", true);
// 房间仅对成员开放
submitForm.setAnswer("muc#roomconfig_membersonly", false);
// 允许占有者邀请其他人
submitForm.setAnswer("muc#roomconfig_allowinvites", true);
// 能够发现占有者真实 JID 的角色
// submitForm.setAnswer("muc#roomconfig_whois", "anyone");
// 登录房间对话
submitForm.setAnswer("muc#roomconfig_enablelogging", true);
// 仅允许注册的昵称登录
submitForm.setAnswer("x-muc#roomconfig_reservednick", true);
// 允许使用者修改昵称
submitForm.setAnswer("x-muc#roomconfig_canchangenick", true);
// 允许用户注册房间
submitForm.setAnswer("x-muc#roomconfig_registration", false);
// 发送已完成的表单(有默认值)到服务器来配置聊天室
mUserChat.sendConfigurationForm(submitForm);
return true;
} catch (SmackException.NoResponseException | XMPPException.XMPPErrorException
| SmackException.NotConnectedException e) {
e.printStackTrace();
}
return false;
}