Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JXMPP&;smack Android库,获取消息传递状态_Android_Xmpp_Chat_Messaging_Smack - Fatal编程技术网

JXMPP&;smack Android库,获取消息传递状态

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

Em正在开发聊天应用程序,一切都很正常,现在我想检查我的消息是否已发送或被接收者看到。为此,我使用XMPP库的DeliveryReceiptRequest获得了消息的RequestID。但是Em不知道如何通过这个ID获得状态。你能帮我一下吗?我想在接下来的几个小时内完成它

想问什么就问什么。我马上给你答复

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来监听更新的状态。您也可以参考官方文件

可能的副本