2017-06-14 67 views
-1

我正在使用Smack XMPP创建一个聊天应用程序。除阅读/递送报告外,一切都运行良好。在smack XMPP中发送Message.Type.normal android

这是怎么了发送送达报告:

{ 
    Message message = new Message(); 
    message.setTo(chatMessage.getReceiver()); 
    message.setType(Message.Type.normal); 
    message.setFrom(chatMessage.getSender()); 
    message.setStanzaId(chatMessage.getReceiver() + "_" + CommonMethods.getCurrentGMTTime(0)); 

    ChatMarker_File_XMPP_SERVER chatMarker_file_xmpp_server=new ChatMarker_File_XMPP_SERVER("received","urn:xmpp:chat-markers:0" , true); 
    chatMarker_file_xmpp_server.setIdValue(chatMessage.getMsgid()); 
    message.addExtension(chatMarker_file_xmpp_server); 
    Mychat = ChatManager.getInstanceFor(connection).createChat(
      message.getTo() + "@" 
        + context.getString(R.string.server), 
      mMessageListener); 
    try { 
     if (connection.isAuthenticated()) { 
      /******************************************************** 
      * ******** MESSAGE SEND  ********************** 
      ***/ 

      Mychat.sendMessage(message); 

     } else { 

      login(); 
     } 
    } catch (SmackException.NotConnectedException e) { 
     Log.e("xmpp.SendMessage()", "msg Not sent!-Not Connected!"); 

    } catch (Exception e) { 
     Log.e("SendMessage()-Exception", 
       "msg Not sent!" + e.getMessage()); 
    } 

} 

但问题是Mychat.sendMessage(message);SendMessage方法就是做这个

/** 
    * Sends a message to the other chat participant. The thread ID, recipient, 
    * and message type of the message will automatically set to those of this chat. 
    * 
    * @param message the message to send. 
    * @throws NotConnectedException 
    */ 
    public void sendMessage(Message message) throws NotConnectedException { 
     // Force the recipient, message type, and thread ID since the user elected 
     // to send the message through this chat object. 
     message.setTo(participant); 
     message.setType(Message.Type.chat); 
     message.setThread(threadID); 
     chatManager.sendMessage(this, message); 
    } 

现在虽然我明确设置“为messageType”到“正常'但'sendMessage()'将它再次转换为Type.Chat

我已经检查了其他可能的方法和文档,以便能以某种方式发送消息类型正常但找不到任何东西。

谢谢

回答

2

为什么不使用Delivery Receipt Manager?

虽然发送消息:

Message message = new Message(); 
String deliveryReceiptId = DeliveryReceiptRequest.addTo(message); 
message.setType(Message.Type.chat); 

而且可以收到交付ackknowledgement像下面..

DeliveryReceiptManager.getInstanceFor(connection).addReceiptReceivedListener(new ReceiptReceivedListener() { 
        @Override 
        public void onReceiptReceived(Jid fromJid, Jid toJid, String receiptId, Stanza receipt) { 
         //here receiptId will be same as deliveryReceiptId u sent above which means msg is delivered to recipient 
        } 
       }); 
      } 

,如果你想发送到服务器状态消息u可以在这里查看我的回答: https://stackoverflow.com/a/44254615/6350239

并为了实现msg读取状态你需要实现你的自定义阅读收据像这样https://stackoverflow.com/a/29001653/6350239