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

柔情痞子 提交于 2019-12-08 14:20:41

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!