在 smack XMPP android 中发送 Message.Type.normal
Send Message.Type.normal in smack XMPP android
我正在使用 Smack XMPP 创建一个聊天应用程序。除 Read/Deliver 报告外,一切正常。
这是我发送送达报告的方式:
{
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' 设置为 'normal',但 'sendMessage()' 再次将其转换为 Type.Chat
。
我已经检查了其他可能的方法和文档,这样我就可以以某种方式发送 Type normal 的消息,但找不到任何东西。
谢谢
为什么不使用 Delivery Receipt Manager?
发送消息时:
Message message = new Message();
String deliveryReceiptId = DeliveryReceiptRequest.addTo(message);
message.setType(Message.Type.chat);
并且您可以收到如下所示的送达确认..
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
}
});
}
如果你想将消息发送到服务器状态,你可以在这里查看我的回答:
为了实现消息阅读状态,您需要像这样实现自定义阅读回执
我正在使用 Smack XMPP 创建一个聊天应用程序。除 Read/Deliver 报告外,一切正常。
这是我发送送达报告的方式:
{
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' 设置为 'normal',但 'sendMessage()' 再次将其转换为 Type.Chat
。
我已经检查了其他可能的方法和文档,这样我就可以以某种方式发送 Type normal 的消息,但找不到任何东西。
谢谢
为什么不使用 Delivery Receipt Manager?
发送消息时:
Message message = new Message();
String deliveryReceiptId = DeliveryReceiptRequest.addTo(message);
message.setType(Message.Type.chat);
并且您可以收到如下所示的送达确认..
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
}
});
}
如果你想将消息发送到服务器状态,你可以在这里查看我的回答:
为了实现消息阅读状态,您需要像这样实现自定义阅读回执