Android smack消息已发送状态

Android smack消息已发送状态,android,openfire,smack,Android,Openfire,Smack,我使用smack和openfire在android中创建聊天应用程序。 对于消息状态,我对以其他方式传递和显示的消息没有问题 客户机(双重检查)。 我将向发件人发送一条简单的json消息,如bellow: {“交付”:timestapmp} 并对其进行解析,并仔细检查时间戳小于以前发送的消息。 问题在于发送状态(一次检查)。 当我向服务器发送消息时,服务器没有响应该消息发送的任何内容。 在smack中是否可以通过服务器的回调发送消息。 如果可能,是否可以在回调响应中发送时间服务器。 谢谢。据我所

我使用smack和openfire在android中创建聊天应用程序。 对于消息状态,我对以其他方式传递和显示的消息没有问题 客户机(双重检查)。 我将向发件人发送一条简单的json消息,如bellow: {“交付”:timestapmp} 并对其进行解析,并仔细检查时间戳小于以前发送的消息。 问题在于发送状态(一次检查)。 当我向服务器发送消息时,服务器没有响应该消息发送的任何内容。 在smack中是否可以通过服务器的回调发送消息。 如果可能,是否可以在回调响应中发送时间服务器。
谢谢。

据我所知,我已经到了这个界面:
ReceiptReceivedListener
,它位于
smack 4.2

以下是我是如何实现这一点的:

private ReceiptReceivedListener receiptReceivedListener;

/**
 * get DeliveryReceiptManager
 *
 * @return
 */
private DeliveryReceiptManager getDeliveryReceiptManager() {
    if (deliveryReceiptManager == null && getConnection() != null) {
        deliveryReceiptManager = DeliveryReceiptManager.getInstanceFor(getConnection());
    }
    return deliveryReceiptManager;
}
添加侦听器

getDeliveryReceiptManager().addReceiptReceivedListener(receiptReceivedListener);
receiptReceivedListener = new ReceiptReceivedListener() {
    @Override
    public void onReceiptReceived(Jid fromJid, Jid toJid, String receiptId, Stanza receipt) {
        //TODO : on recieved status of message delivery
    }
};
收到回电

getDeliveryReceiptManager().addReceiptReceivedListener(receiptReceivedListener);
receiptReceivedListener = new ReceiptReceivedListener() {
    @Override
    public void onReceiptReceived(Jid fromJid, Jid toJid, String receiptId, Stanza receipt) {
        //TODO : on recieved status of message delivery
    }
};
这肯定会对你有帮助

以下是Smack 4.2的界面,包含全部详细信息:

/**
 * Callback invoked when a new receipt got received.
 * <p>
 * {@code receiptId} correspondents to the message ID, which can be obtained with
 * {@link org.jivesoftware.smack.packet.Stanza#getStanzaId()}.
 * </p>
 * 
 * @param fromJid the jid that send this receipt
 * @param toJid the jid which received this receipt
 * @param receiptId the message ID of the stanza(/packet) which has been received and this receipt is for
 * @param receipt the receipt
 */
void onReceiptReceived(Jid fromJid, Jid toJid, String receiptId, Stanza receipt);
/**
*收到新收据时调用回调。
*
*{@code receiptId}消息ID的对应者,可通过
*{@link org.jivesoftware.smack.packet.Stanza#getStanzaId()}。
*

* *@param fromJid发送此收据的jid *@param toJid收到这张收据的jid *@param receiptId已接收的节(/packet)的消息ID,此收据用于 *@param收据收据 */ 接收时无效(Jid fromJid、Jid toJid、字符串接收ID、节接收);
嘿,你可以这样做。。每次发送消息时,通过将该消息作为上述方法中的参数传递来调用方法

注意:应启用流管理以使其工作,可按如下方式完成:

DeliveryReceiptManager.setDefaultAutoReceiptMode(DeliveryReceiptManager.AutoReceiptMode.always);
        ProviderManager.addExtensionProvider(DeliveryReceipt.ELEMENT, DeliveryReceipt.NAMESPACE, new DeliveryReceipt.Provider());
        ProviderManager.addExtensionProvider(DeliveryReceiptRequest.ELEMENT, DeliveryReceipt.NAMESPACE, new DeliveryReceiptRequest.Provider());

您使用的smack版本是上一个版本,4.2请查看我已为您回答请检查并让我知道这似乎是客户端对客户端,我想从服务器收到响应,当消息发送时这是什么意思:但我想知道消息是由服务器接收的,如果我的消息已发送,我如何侦听服务器(如whatsapp中的一个勾号状态)或者,如果出现任何错误,我如何获得错误响应。请您解释一下这将如何工作,以便我也可以了解这是什么
MessageAsyncTask
,这是我的异步任务,用于将消息状态更新到sqlite。。更清楚的是,它只是处理响应,就像你可以在那个地方有一个方法一样。。MessageAsyncTask不相关,如果您不想保存您的响应,请告诉我您是如何获取此方法中“数据包>中传递的邮件”的状态的
@Override public void processStanza(数据包)