如何在 android 中使用 smack 4.1 创建 xmpp 群聊和添加成员

How to create xmpp group chat and add members using smack 4.1 in android

在我的应用程序中,我想创建组并使用 smack 4.1 将用户添加到组中。 我能够创建组但无法在该组中添加用户。 我创建群组的代码是...

创建群组

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()=====>");
        }
    }

添加用户代码 这就是我添加用户的操作

  // 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();
    }

我做了一点same.Just如果你used.Change设置接受任何请求,你发送邀请然后在openfire上安装插件订阅。

如果您不使用openfire,那么您只需在另一端接受他们的邀请即可。 希望对您有所帮助。

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();
                }

在这里获取 Muc 邀请,

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!");
                }
            }
        });