Android - Smack 出席和“正在输入”功能无法正常工作

8

我正在使用Smack库v4.1.0(不是aSmack)为Android应用程序中的聊天功能。 我似乎无法使以下两个功能正常工作:

  1. 用户状态(在线,上次查看)
  2. 聊天消息状态(已发送,已传送,已读取)

对于用户状态,我使用以下代码,它总是返回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");
}

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

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);
    }
}

并将其用作:

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

但回调从未被调用。

如何在Android上使用新的Smack Library使它们正常工作?是否已有人实现了这些功能?

谢谢!


当用户尝试使用与接收器相同的连接上线和离线时,您可以获取在线或离线状态,但必须从您的编码端维护最后一次查看。 - Rajan Bhavsar
1个回答

3
  1. 为了接收到用户的在线状态,您需要先发送 初始出席信息。请注意,没有 type 属性的出席信息包被视为“在线”出席信息。

  2. 聊天状态 是由您联系人的客户端应用生成的。通常,他们不会向“离线”联系人和不在“通讯录”中的联系人发送聊天状态。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接