Smack 4.1获取打字状态

时间:2016-09-27 09:29:06

标签: android chat smack

我知道这是一个重复的问题,但我是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();
    }
}

如果有任何形式的帮助将不胜感激。

0 个答案:

没有答案