问题
In my app, I want to create groups and add users to the groups using smack 4.1. I am able to create group but unable to add user in that groups. My Code for create groups is...
create group
if (connection != null) {
String groupName = XmppUtils.buildMUCName(grpName);
MultiUserChat multiUserChat = managerMuc.getMultiUserChat(groupName);
if (!multiUserChat.isJoined()) {
boolean createNow;
try {
multiUserChat.createOrJoin(grpName);
createNow = true;
if (createNow) {
Form form = multiUserChat.getConfigurationForm().createAnswerForm();
form.setAnswer("muc#roomconfig_publicroom", true);
form.setAnswer("muc#roomconfig_roomname", grpName); // form.setAnswer("muc#roomconfig_roomowners", userDate.getUserId().toString() + "@" + Config.ChatValues.SERVICE_NAME);
form.setAnswer("muc#roomconfig_persistentroom", true);
List<String> cast_values = new ArrayList<String>();
cast_values.add("moderator");
cast_values.add("participant");
cast_values.add("visitor");
form.setAnswer("muc#roomconfig_presencebroadcast", cast_values);
multiUserChat.sendConfigurationForm(form);
multiUserChat.join(userDate.getUserId().toString() + "@" + Config.ChatValues.SERVICE_NAME); // multiUserChat.sendConfigurationForm(new Form(DataForm.Type.submit)); //this is to create the room immediately after join.
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
Log.e("createGroup", "=======multiUserChat.isJoined()=====>");
}
}
Code for add users this is what I am doing to add users
// Create a MultiUserChat using an XMPPConnection for a room
String roomName = groupName + "@" + Config.ChatValues.GROUP_SERVICE_NAME;
MultiUserChat muc2 = managerMuc.getMultiUserChat(roomName);
// User2 joins the new room
// The room service will decide the amount of history to send
// The number of chat room services will decide to accept the historical record
/* DiscussionHistory history = new DiscussionHistory();
history.setMaxStanzas(0);*/
//history.setSince(new Date());
try {
for (int i = 0; i < selectedLisrArray.size(); i++) {
String userId = selectedLisrArray.get(i).userId.toString() + "@" + Config.ChatValues.SERVICE_NAME;
Log.e("joinGroups", "=========>" + roomName + " users to join " + userId);
muc2.invite(msg, userId, "let's join this room ");
muc2.sendMessage(userId + " : You have joined the group : " + roomName);
}
} catch (SmackException.NotConnectedException e) {
e.printStackTrace();
}
回答1:
I have done little bit same.Just you send invitation and then install plugin Subscription on openfire if you used.Change settings to accept any request.
If you not using openfire then you just accept their invitation on other side. Hope this will help you.
MultiUserChat muc = new MultiUserChat(XMPP.getInstance().getConnection(getActivity()), groupname);
try {
muc.create(StringUtils.parseName(XMPP.getInstance().getConnection(getActivity()).getUser()));
muc.sendConfigurationForm(new Form(Form.TYPE_SUBMIT));
} catch (XMPPException e) {
} catch (NoResponseException e) {
e.printStackTrace();
} catch (SmackException e) {
e.printStackTrace();
}
for (int i = 0; i < alSelectedContacts.size(); i++) {
Log.e("tag", "group chating purpose1 ::" + alSelectedContacts.get(i).get("id"));
try {
muc.invite((alSelectedContacts.get(i).get("id") + "_user") + "@" + XMPP.HOST,
alSelectedContacts.get(i).get("id") + "_user");
} catch (NotConnectedException e) {
e.printStackTrace();
}
}
try {
muc.sendMessage("New group created");
} catch (NotConnectedException e1) {
e1.printStackTrace();
} catch (XMPPException e1) {
e1.printStackTrace();
}
Get Muc invitation here,
MultiUserChat.addInvitationListener(mXmppConnection,
new InvitationListener() {
@Override
public void invitationReceived(Connection connection,
String room, String inviter, String reason,
String unKnown, Message message) {
//MultiUserChat.decline(mXmppConnection, room, inviter,
// "Don't bother me right now");
// MultiUserChat.decline(mXmppConnection, room, inviter,
// "Don't bother me right now");
try {
muc.join("test-nick-name");
Log.e("abc","join room successfully");
muc.sendMessage("I joined this room!! Bravo!!");
} catch (XMPPException e) {
e.printStackTrace();
Log.e("abc","join room failed!");
}
}
});
来源:https://stackoverflow.com/questions/38988799/how-to-create-xmpp-group-chat-and-add-members-using-smack-4-1-in-android