JXMPP&;smack Android库,获取消息传递状态
Em正在开发聊天应用程序,一切都很正常,现在我想检查我的消息是否已发送或被接收者看到。为此,我使用XMPP库的DeliveryReceiptRequest获得了消息的RequestID。但是Em不知道如何通过这个ID获得状态。你能帮我一下吗?我想在接下来的几个小时内完成它 想问什么就问什么。我马上给你答复JXMPP&;smack Android库,获取消息传递状态,android,xmpp,chat,messaging,smack,Android,Xmpp,Chat,Messaging,Smack,Em正在开发聊天应用程序,一切都很正常,现在我想检查我的消息是否已发送或被接收者看到。为此,我使用XMPP库的DeliveryReceiptRequest获得了消息的RequestID。但是Em不知道如何通过这个ID获得状态。你能帮我一下吗?我想在接下来的几个小时内完成它 想问什么就问什么。我马上给你答复 private void sendMessage(final String messageId, final String jid, final String content, final i
private void sendMessage(final String messageId, final String jid, final String content, final int chatType, final boolean isSticker) {
new Thread(new Runnable() {
@Override
public void run() {
Message message;
Log.e("Send SMS" , "Step 4");
try {
message = new Message(JidCreate.from(jid), content);
String deliveryReceiptId = DeliveryReceiptRequest.addTo(message);
Log.e("Numan Special", "sendMessage: deliveryReceiptId for this message is: " + deliveryReceiptId);
manageBoBExtension(message);
} catch (XmppStringprepException e) {
e.printStackTrace();
Log.e("Send SMS" , "Step 7");
mListener.onError(e.getLocalizedMessage());
return;
}
message.setStanzaId(messageId);
sendMessageDependingOnType(message, jid, chatType);
}
private void manageBoBExtension(Message message) {
if (isSticker) {
Log.e("Send SMS" , "Step 5");
BoBHash bobHash = new BoBHash(Base64.encode(content), "base64");
message.addExtension(new BoBExtension(bobHash, null, null));
}
Log.e("Send SMS" , "Step 6");
}
}).start();
}
private void sendMessageDependingOnType(Message message, String jid, int chatType) {
if (chatType == Chat.TYPE_MUC_LIGHT) {
MultiUserChatLightManager manager = XMPPSession.getInstance().getMUCLightManager();
try {
MultiUserChatLight multiUserChatLight = manager.getMultiUserChatLight(JidCreate.from(jid).asEntityBareJidIfPossible());
multiUserChatLight.sendMessage(message);
} catch (XmppStringprepException | InterruptedException | SmackException.NotConnectedException e) {
mListener.onError(e.getLocalizedMessage());
} finally {
mListener.onMessageSent(message);
}
} else {
ChatManager chatManager = RoomsListManager.getInstance().getChatManager();
try {
chatManager.createChat(JidCreate.from(jid).asEntityJidIfPossible()).sendMessage(message);
} catch (InterruptedException | XmppStringprepException | SmackException.NotConnectedException e) {
mListener.onError(e.getLocalizedMessage());
} finally {
mListener.onMessageSent(message);
}
}
}
在发送消息之前,添加
DeliveryReceiptRequest.addTo(yourMsg)
在另一端接收消息之后,使用message发送另一条xmpp消息。addExtension(new DeliveryReceipt(packet.getStanzaId))
然后通过实现ReceiptReceivedListener来监听更新的状态。您也可以参考官方文件可能的副本