我知道这是一个重复的问题,但我是xmpp聊天中的新手,并且只有一方打字状态,我希望打字状态两侧发件人和收件人。 我也在搜索并使用此链接How to know Typing Status in XMPP openfire using Smack
这是我的 ChatMessageListener 类
private class MMessageListener implements ChatMessageListener, ChatStateListener {
public MMessageListener(Context contxt) {
}
@Override
public void processMessage(final org.jivesoftware.smack.chat.Chat chat,
final Message message) {
Log.e("Msg Received", "Xmpp message received: '" + message);
}
@Override
public void stateChanged(Chat chat, ChatState state) {
Log.e("Chat State", "" + state);
Intent intent = new Intent(MESSAGE_RECEIVE_BROADCAST);
if (ChatState.composing.equals(state)) {
intent.putExtra("chatState", "" + chat.getParticipant() + " is typing..");
} else if (ChatState.gone.equals(state)) {
intent.putExtra("chatState", "" + chat.getParticipant() + " has left the conversation.");
} else {
intent.putExtra("chatState", "" + chat.getParticipant() + ": " + state.name());
}
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
}
}
我还在edittext上包含Textwatcher,以便向接收者发送输入状态
edtMsg.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
ChatListActivity.getmService().xmpp.setCurrentState();
}
@Override
public void afterTextChanged(Editable s) {
}
});
这是我的 setCurrentState
public void setCurrentState() {
try {
if (!chat_created) {
if(mMessageListener == null)
mMessageListener = new MMessageListener(context);
Mychat = ChatManager.getInstanceFor(connection).createChat(
SharedPreferenceUtil.getString(ChatUtils.XMPP_RECEIVER, "") + "@"
+ context.getString(R.string.server),
mMessageListener);
chat_created = true;
}
ChatStateManager.getInstance(connection).setCurrentState(ChatState.composing, Mychat);
} catch (SmackException.NotConnectedException e) {
e.printStackTrace();
}
}
如果有任何形式的帮助将不胜感激。