在我的应用中,我正在使用下面的方法离开聊天室。
public void leaveChatRoom(String username)
{
Log.i("XMPP Chat Client", "User left chat room ");
if(groupChat != null && groupChat.isJoined())
{
try {
Presence leavePresence = new Presence(Presence.Type.unavailable);
leavePresence.setTo("groupchat@conference.xxx/" + username);
connection.sendPacket(leavePresence);
groupChat.leave();
} catch (NotConnectedException e) {
e.printStackTrace();
}
}
}要检查用户是否已加入,
public boolean isJoinedGroup(String username)
{
boolean isConnected = false;
if(groupChat != null && groupChat.isJoined())
{
isConnected = true;
Log.i("XMPP Chat Client", "Joined True");
}
return isConnected;
}如果有一个成功的聊天服务器连接,这是很好的。但在某些情况下,聊天服务器连接会丢失。在这种情况下,我必须让用户离开聊天室,并再次自动加入。因此,当我失去聊天服务器连接时,我将重新连接到聊天服务器,并一起调用leaveChatRoom方法和join group方法。我将NotConnectedException放在行groupChat.leave();中,当我检查joined状态时,它总是返回true。当我检查openfire管理面板时,群聊占居者列表中没有用户。在这种情况下,我如何正确地将用户从群聊中删除?
发布于 2022-10-25 10:43:29
离开一个聊天室在smack Android - Kotlin
override fun leaveGroup(roomId: String, username: String) {
if (connection.isConnectionEstablished()) {
try {
val mucJid = JidCreate.entityBareFrom("${roomId}.@conference.yourhost/${username}")
val jid = JidCreate.from("${roomId}.@conference.yourhost/${username}")
val manager = MultiUserChatManager.getInstanceFor(connection)
val muc = manager.getMultiUserChat(mucJid)
if (!muc.isJoined) {
val nickName = Resourcepart.from(phone)
muc.join(nickName)
}
val leavePresence = PresenceBuilder.buildPresence().ofType((Presence.Type.unavailable)).build()
leavePresence.to = jid
connection.sendStanza(leavePresence)
muc.leave()
} catch (e: NoResponseException) {
e.printStackTrace()
} catch (e: XMPPErrorException) {
e.printStackTrace()
} catch (e: NotConnectedException) {
e.printStackTrace()
}
}
}https://stackoverflow.com/questions/29801865
复制相似问题