简述
开启我们第三篇,之前两篇相对来说,这篇才是重中之重。我们这篇主要对于会议室进行介绍,啥也不说了,燥起来.......
资源
AbstractXMPPConnection connection = "自己赋值";
String owner = "群主名称";
String roomName = "房间名称";
String password = "房间密码";
String roomJid = "房间jid";
1.创建会议室
public static boolean createRoom(){
try{
UUID uuid = UUID.randomUUID();
String roomJid = uuid.toString() + "@conference."+connection.getServiceName();
MultiUserChat muc = MultiUserChatManager.getInstanceFor(connection).getMultiUserChat(roomJid);
muc.create(owner) //owner创建的房间
Form form = muc.getConfigurationForm(); //获取聊天室的配置表单
Form submit = form.createAnswerForm(); //根据原始表单创建一个提交的新表单
for(FormField field : form.getFields()){ //向要提交的表单添加默认答复
if(FormField.Type.hidden == filed.getType() && filed.getVariable() != null){
submit.setDefaultAnswer(filed.getVariable()); //设置默认值作为答复
}
}
List<String> owners = new ArrayList<>();
owners.add(connection.getUser().toString());
submit.setAnswer("muc#roomconfig_roomname",roomName); //设置房间名称
submit.setAnswer("muc#roomconfig_roomowners",owners); //设置房间群主
submit.setAnswer("muc#roomconfig_persistentroom",true); //设置持久会议室
submit.setAnswer("muc#roomconfig_membersonly",false); //设置会议室仅对成员开放 false不止对成员
submit.setAnswer("muc#roomconfig_allowinvites",true); //允许占有者邀请其他人
submit.setAnswer("muc#roomconfig_changesubject",true); //设置所有人能修改主题
if(!TextUtils.isEmpty(password)){
submit.setAnswer("muc#roomconfig_passwordprotectedroom",true); //进入是否需要密码
submit.setAnswer("muc#roomconfig_roomsecret",password); //设置进入密码
}
submit.setAnswer("muc#roomconfig_enablelogging",true); //登陆房间对话
submit.setAnswer("x-muc#roomconfig_reservednick",true); //仅允许注册的昵称登陆
submit.setAnswer("x-muc#roomconfig_canchangenick",false); //允许使用者修改昵称
submit.setAnswer("x-muc#roomconfig_registration",false); //允许用户注册房间
muc.sendConfigurationForm(submit); //发送表单
}catch(Exception e){
e.printStackTrace();
return false;
}
return true;
}
2.邀请好友入会议室
public static boolean inviteJionGroup(){
try{
MultiUserChat muc = MultiUserChatManager.getInstanceFor(connection).getMultiUserChat(roomJid);
muc.invite("好友Jid","原因(可填、不填)");
}catch(Exception e){
e.printStackTrace();
return false;
}
return true;
}
3.进入会议室
public static boolean joinGroup(){
try{
MultiUserChat muc = MultiUserChatManager.getInstanceFor(connection).getMultiUserChat(roomJid);
DiscussionHistory history = new DiscussionHistory(); //历史消息
Date date = new Date("上一次退出记录 时间戳");
history.setSince(date); //设置接收某个时间段后的 历史消息
muc.join("用户账户",password,history,SmackConfiguration.getDefaultPacketReplyTimeout());
}catch(Exception e){
e.printStackTrace();
return false;
}
return true;
}
4.会议室踢人(群主才行)
public static boolean kickGroupMember(){
try{
MultiUserChat muc = MultiUserChatManager.getInstanceFor(connection).getMultiUserChat(roomJid);
muc.kickParticipant("用户名称","原因");
}catch(Exception e){
e.printStackTrace();
return false;
}
return true;
}
但是此方法,存在很大的缺陷,踢人的时候会出现异常,muc.kickParticipant()方法,不知道传是”用户名称“,还是”用户账户“。
所以,在此我做了一定的调整。
发送IQ包-->
<iq to='roomJid' from='用户Jid' id='FEH85-80' type='set'><query xmlns='http://jabber.org/protocol/muc#admin'><item jid="18390317131@ime.xiaouqyb.com" role="none"><reason/></item></query></iq>
5.销毁会议室
public static boolean destoryRoom(){
try{
MultiUserChat muc = MultiUserChatManager.getInstanceFor(connection).getMultiUserChat(roomJid);
if(muc != null)
muc.destroy("原因",用户Jid("登陆用户Jid"));
}catch(Exception e){
e.printStackTrace();
return false;
}
return true;
}
结束语
写的筋疲力尽,果然周六适合放松,无心编码。终于写群相关接口,希望对大家有帮助吧!
网友评论