如何在 Android 的 Smack 4.2 中了解 1:1 对话中的打字状态?
Posted
技术标签:
【中文标题】如何在 Android 的 Smack 4.2 中了解 1:1 对话中的打字状态?【英文标题】:How to know typing status in 1:1 conversation in Smack 4.2 in Android? 【发布时间】:2017-09-22 12:22:54 【问题描述】:我正在 android 中构建一个聊天应用程序。我发送和接收消息,但我不知道如何知道会话的其他用户状态和输入状态。
我一直在阅读使用 ChatManagerLister,但在此版本中已弃用它。
在 Smack 4.2 中,ChatManager 类没有侦听聊天状态的方法。
【问题讨论】:
***.com/questions/33479355/… 感谢@Sarthak Mittal 的回答,但我看不到可能的解决方案。MessageEventManager
类在 Smack 中处于旧模式
我将在一两天内在提到的链接中正确更新我的答案,现在有点忙! :)
顺便说一句,我已经手动添加了一个syncStanzaListener来监听打字状态的变化,也手动发送,我已经在上面的链接中发布了打字状态变化的相关Rx代码! :)
好的,提前谢谢!!我会等的
【参考方案1】:
您使用chatstates ejabberd 协议来输入状态。请阅读此文档可能会对您有所帮助XEP-0085: Chat State Notifications
android端需要实现以下代码
Message msg= (Message) stanza;
// below ChatStateExtension for Compossing message.
ChatStateExtension state = (ChatStateExtension)msg.getExtension("http://jabber.org/protocol/chatstates");//jabber:x:event
// if state (ChatStateExtension) !=null and is composing then call listener method if not error.
if(state!=null)
Log.d(AppConstants.ELEMENT,"ChatStateExtension : " + state.toXML());
if (state.getElementName().equals("composing"))
if (msg.getType().equals(Message.Type.error))
return;
if (iCallBackForTypingListener != null)
DelayInformation timestamp = (DelayInformation) msg.getExtension("delay", "urn:xmpp:delay");
if (timestamp == null)
timestamp = (DelayInformation) msg.getExtension("x", "jabber:x:delay");
if (timestamp != null && timestamp.getReason().equalsIgnoreCase("Offline Storage")) //return if delay info is Offline Storage
return;
//update your typing listener
iCallBackForTypingListener.onTypingStanza(fromJID, typingSender);
// xmpp.updateChatState(fromJID, state.getElementName(), sender);
return;
else if (state.getElementName().equals("paused"))
return;
【讨论】:
以上是关于如何在 Android 的 Smack 4.2 中了解 1:1 对话中的打字状态?的主要内容,如果未能解决你的问题,请参考以下文章
Android Smack 4.2:“XMPPError: feature-not-implemented - cancel”(错误)
我在使用 smack 4.2 Openfire 创建 XMPP 客户端时遇到问题