【问题标题】:Android - Smack presence and "is typing" features not workingAndroid - Smack 存在和“正在输入”功能不起作用
【发布时间】:2016-01-01 19:23:47
【问题描述】:

我正在使用 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());

但回调永远不会被调用。

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

谢谢!

【问题讨论】:

  • 当用户尝试使用与接收器相同的连接进行联机和脱机时,您可以获得联机或脱机状态,但您必须保持从编码端看到的最后一次。

标签: java android xmpp chat smack


【解决方案1】:
  1. 为了接收用户状态,您需要先发送initial presence。注意,没有type 属性的出席信息包被认为是“在线”出席信息。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多