如何使用smack 4.1.8 +

时间:2016-12-29 13:59:08

标签: android

如何在同一个侦听器上收听多用户聊天和单个用户聊天的传入消息。现在对于单用户聊天我正在使用以下代码:

chatManager.addChatListener(new ChatManagerListener() {
        @Override
        public void chatCreated(Chat chat, boolean createdLocally) {

    chat.addMessageListener(new ChatStateListener() {
        @Override
        public void stateChanged(Chat chat, ChatState state) {

            Log.d(TAG,"...stateChanged called...");

            if (ChatState.composing.equals(state)) {
                Log.d("Chat State",chat.getParticipant() + " is typing..");
            } else if (ChatState.gone.equals(state)) {
                Log.d("Chat State",chat.getParticipant() + " has left the conversation.");
            } else {
                Log.d("Chat State",chat.getParticipant() + ": " + state.name());
            }
        }

        @Override
        public void processMessage(Chat chat, Message message) {

            Log.d(TAG,"---Received a message---");
            Log.d(TAG,"participant: "+chat.getParticipant());
            Log.d(TAG,"message.getBody(): "+message.getBody());
            Log.d(TAG,"message.getFrom(): "+message.getFrom());
            Log.d(TAG,"message.getType(): "+message.getType());
            Log.d(TAG,"message.getSubject(): "+message.getSubject());

            String from=message.getFrom();
            String sender_id="";
            if(from.contains("/"))
            {
                sender_id=from.split("/")[0];
                Log.d(TAG,"The real sender_id is :" +sender_id);
            }
            else
            {
                sender_id=from;
            }

            Intent intent=new Intent(ChattingConnectionService.NEW_MESSAGE);
            intent.setPackage(mContext.getPackageName());
            intent.putExtra(ChattingConnectionService.BUNDLE_FROM_USERID,sender_id);
            intent.putExtra(ChattingConnectionService.BUNDLE_MESSAGE_BODY,message.getBody());
            mContext.sendBroadcast(intent);
            Log.d(TAG,"Received message from :"+sender_id+" broadcast sent.");
        }
    });

        }
    });

对于多用户聊天,我使用以下代码:

 multiUserChat=multiUserChatManager.getMultiUserChat(stringExtra);
    multiUserChat.addMessageListener(new MessageListener() {
        @Override
        public void processMessage(Message message) {
            Log.d(TAG,"---process message called in joinRoom method");
            Log.d(TAG,"---Received a message from: "+message.getFrom());
            Log.d(TAG,"message.getBody(): "+message.getBody());
            Log.d(TAG,"message.getFrom(): "+message.getFrom());
            Log.d(TAG,"message.getType(): "+message.getType());
            Log.d(TAG,"message.getSubject(): "+message.getSubject());

            if(message.getBody()!=null)
            {
                Intent intent=new Intent(ChattingConnectionService.NEW_MESSAGE);
                intent.setPackage(mContext.getPackageName());
                intent.putExtra(ChattingConnectionService.BUNDLE_FROM_USERID,message.getFrom());
                intent.putExtra(ChattingConnectionService.BUNDLE_MESSAGE_BODY,message.getBody());
                mContext.sendBroadcast(intent);
                Log.d(TAG,"Received message from :"+message.getFrom()+" broadcast sent.");
            }
        }
    });

我想在同一个监听器上收听所有这些传入的消息?请帮我?我在办公室里着火了。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我不知道您的聊天基础设施是什么样的,但无论如何我建议使用Firebase Cloud Messaging Api(以前的Google云消息传递)

当用户A向用户B发送消息时,当服务器收到此消息时,您可以使用Firebase云消息传递消息或有效负载给用户B并通知他/她收到消息的用户。

对于群聊,您可以使用上述解决方案,当用户A向群聊workaholics发送消息时,您的聊天服务器正在查询该会议室中的所有收件人,例如用户{ {1}}和B

处理群聊的听众的另一个提示是使用此处的Firebase云消息传递中的主题消息功能:

https://firebase.google.com/docs/cloud-messaging/android/topic-messaging

当您要向特定设备或设备组发送通知时,FCM(Firebase云消息传递)是您的选择。适用于Android,iOS等等..