Android - Smack存在和"打字"功能无法正常工作

Mah*_*iya 8 java android chat xmpp smack

我在Android应用程序中使用Smack库v4.1.0(不是aSmack)进行聊天功能.我似乎无法使用以下两个功能:

  1. 用户存在(在线,上次见过)
  2. 聊天消息状态(已发送,已发送,已读取)

对于User Presence,我使用以下始终返回的代码null.

Presence userPresence = roster.getPresence(toUser);
System.out.println("*** User status: " + userPresence.getStatus());

if (userPresence.getMode() == Presence.Mode.available || userPresence.getMode() == Presence.Mode.chat) {
    lblIsTyping.setText("Online");
} else {
    lblIsTyping.setText("Offline");
}
Run Code Online (Sandbox Code Playgroud)

对于消息状态,我使用以下代码:

private class MessageListenerImpl implements MessageListener, ChatStateListener {

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

    @Override
    public void stateChanged(Chat chat, ChatState chatState) {
        System.out.println("*** chat: " + chat.toString());
        if (ChatState.composing.equals(chatState)) {
            lblIsTyping.setText("typing...");
            System.out.println("Chat State: " + chat.getParticipant() + " is typing..");
        } 
    }

    @Override
    public void processMessage(Message message) {
        processMessageCore(message);
    }
}
Run Code Online (Sandbox Code Playgroud)

并将其用作:

ChatManager.getInstanceFor(HCSmackService.getInstance().getConnection()).createChat(toUser, mThreadID, new MessageListenerImpl());

但是回调不会被调用.

如何使用新的Smack Library在Android上运行这些工具?有人已经实现了这些功能吗?

谢谢!

vit*_*ter 3

  1. 为了接收用户状态,您需要首先发送初始状态。注意,没有type属性的存在数据包被认为是“在线”存在。

  2. 聊天状态由好友的客户端应用程序生成。通常,他们不会向“离线”联系人和不在“名册中”的联系人发送聊天状态。