gpt4 book ai didi

java - Android - Smack 存在和 "is typing"功能不工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:57:56 27 4
gpt4 key购买 nike

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

  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 上运行?有人已经实现了这些功能吗?

谢谢!

最佳答案

  1. 为了接收用户状态,您需要发送 initial presence第一的。请注意,没有 type 属性的状态包被认为是“在线”状态。

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

关于java - Android - Smack 存在和 "is typing"功能不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32943494/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com