如何使用samck API接收聊天室消息,XMPP
我是Android新手,我尝试使用smack api和ejabberd创建聊天应用程序。 我实现一对一聊天,其工作很好。但我无法收到聊天室消息。 我该怎么办?如何使用samck API接收聊天室消息,XMPP
这里是xmpp.java
public class MyXMPP {
public MyXMPP(MyService context, String serverAdress, String logiUser,
String passwordser) {
this.serverAddress = serverAdress;
this.loginUser = logiUser;
this.passwordUser = passwordser;
this.context = context;
this.applicationContext = context;
init();
}
public static MyXMPP getInstance(MyService context, String server,String user, String pass) {
if (instance == null) {
instance = new MyXMPP(context, server, user, pass);
instanceCreated = true;
}
return instance;
}
public org.jivesoftware.smack.chat.Chat Mychat;
ChatManagerListenerImpl mChatManagerListener;
MMessageListener mMessageListener;
static {
try {
Class.forName("org.jivesoftware.smack.ReconnectionManager");
} catch (ClassNotFoundException ex) {
// problem loading reconnection manager
}
}
public void init() {
gson = new Gson();
mMessageListener = new MMessageListener(context);
mChatManagerListener = new ChatManagerListenerImpl();
initialiseConnection();
}
private void initialiseConnection() {
XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration
.builder();
config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
config.setServiceName(serverAddress);
config.setHost("192.168.0.101");
config.setPort(5222);
config.setDebuggerEnabled(true);
XMPPTCPConnection.setUseStreamManagementResumptiodDefault(true);
XMPPTCPConnection.setUseStreamManagementDefault(true);
connection = new XMPPTCPConnection(config.build());
XMPPConnectionListener connectionListener = new XMPPConnectionListener();
connection.addConnectionListener(connectionListener);
}
private class ChatManagerListenerImpl implements ChatManagerListener {
@Override
public void chatCreated(final org.jivesoftware.smack.chat.Chat chat,
final boolean createdLocally) {
if (!createdLocally)
chat.addMessageListener(mMessageListener);
}
}
public void sendMessage(ChatMessage chatMessage) {
String body = gson.toJson(chatMessage);
Mychat = ChatManager.getInstanceFor(connection).createChat(
chatMessage.receiver + "@"
+ context.getString(R.string.server),
mMessageListener);
chat_created = true;
final Message message = new Message();
message.setBody(body);
message.setStanzaId(chatMessage.msgid);
message.setTo(chatMessage.receiver);
message.setFrom(chatMessage.sender);
message.setType(Message.Type.chat);
Mychat.sendMessage(chatMessage.body);
}
public void sendGroupMessage(ChatMessage chatMessage) {
MultiUserChatManager manager = MultiUserChatManager.getInstanceFor(connection);
MultiUserChat multiUserChat = manager.getMultiUserChat(chatMessage.receiver);
try {
multiUserChat.join(chatMessage.sender,"12345");
// multiUserChat.addMessageListener((MessageListener) mMessageListener);
} catch (XMPPException.XMPPErrorException e) {
e.printStackTrace();
} catch (SmackException e) {
e.printStackTrace();
}
Message message = new Message(chatMessage.receiver, Message.Type.groupchat);
message.setBody(chatMessage.body);
message.setType(Message.Type.groupchat);
message.setFrom(chatMessage.sender);
message.setTo(chatMessage.receiver);
multiUserChat.sendMessage(message);
}
/* Its work good for one to one chat */
private class MMessageListener implements ChatMessageListener {
Context context;
public MMessageListener(Context c) {
this.context = c;
}
@Override
public void processMessage(final org.jivesoftware.smack.chat.Chat chat,
final Message message) {
if (message.getType() == Message.Type.chat
&& message.getBody() != null) {
Log.d("Message received",message.getBody);
}
}
}
}
我实现xmpp.java sendGroupMessage所有连接XMPP连接()是用来发送聊天室的消息,并且其工作良好。 问题是收到聊天室消息。
的Chat
类,您使用的是已过时! 我建议你更新你的smack库到最新版本(目前是4.2)。
这里是如何在啪 - 4.2
XMPPTCPConnection connection; // Assuming you have the connection object
org.jivesoftware.smack.chat2.ChatManager chatManager = org.jivesoftware.smack.chat2.ChatManager.getInstanceFor(connection);
chatManager.addIncomingListener(new IncomingChatMessageListener()
{
@Override
public void newIncomingMessage(EntityBareJid from, Message message, org.jivesoftware.smack.chat2.Chat chat)
{
// Message received here
}
});
我更新了我的xmpp.java –
你可以只发布相关部分:) 只要我有空闲时间,我会看看:) –
okk @ Sarthak我更新我的代码 –
意味着您可以发送消息,而不是接受他们在1附加传入消息监听器:1聊天? –
是@SarthakMittal –
好的,那么您如何验证邮件已成功发送? –