gpt4 book ai didi

android - 如何实现延迟交付 (XEP-203) Smack

转载 作者:行者123 更新时间:2023-11-29 02:32:03 25 4
gpt4 key购买 nike

我知道 DelayInformationManager 类,我知道这是实现此目的的类。但是,我不知道如何使用它,如何指定 Jid 目的地,如何实际发送等等。

谁能给我一个简短的例子来说明它的用法?

最佳答案

使用以下你可以使用 smack lib 实现 Delayed Delivery

发送延迟交货收据

 public void sendReceipt(String toJID, String sender, final String stanzaID, final String id, final long millis, Message.Type msgType) {

if(isConnected()){

Message ack = null; //2017-11-17T15:21:50.063+00:00
try {

String fromJidGroup = toJID;
if(msgType == Message.Type.groupchat){
fromJidGroup = ActivityHelper.createJid(sender) ;
}else{
fromJidGroup = toJID;
}

ack = new Message(JidCreate.from(fromJidGroup), Message.Type.chat); //msgType
ack.addExtension(new DeliveryReceipt(id));


} catch (XmppStringprepException e) {
e.printStackTrace();
}
if(millis!=0) {
DelayInformation delay = new DelayInformation(new Date(millis));
ack.addExtension(delay);
}
if(stanzaID!=null){
ack.setStanzaId(stanzaID);
}
try {

if(connection.isSmEnabled() && connection!=null) {

//addStanzaIdAcknowledgedListener send successfully Receipt or not in server
connection.addStanzaIdAcknowledgedListener(ack.getStanzaId(), new StanzaListener() {
@Override
public void processPacket(Stanza stanza) throws SmackException.NotConnectedException, InterruptedException {

if(registerXmppListener!=null){
registerXmppListener.onStanzaIdAcknowledgedReceived(stanza);
}
}

});

}

connection.sendStanza(ack);

} catch (SmackException.NotConnectedException e) {
e.printStackTrace();
} catch (InterruptedException | StreamManagementException.StreamManagementNotEnabledException e) {
e.printStackTrace();
}

}

}

接收Delayed Delivery,先用xmpp连接注册ReceiptReceivedListener

 private ReceiptReceivedListener mReceiptReceivedListener;

mReceiptReceivedListener = new ReceiptReceivedListener() {
@Override
public void onReceiptReceived(Jid from, Jid to, String rec_id, Stanza stanza) {
if(registerXmppListener!=null) {

Log.d("onReceipt","onReceipt stanza : " + stanza.toXML());
registerXmppListener.onDeliveryStatusReceived(from.toString(),to.toString(),rec_id,stanza);
}
}
};
mDeliveryReceiptManager.addReceiptReceivedListener(mReceiptReceivedListener);

onDeliveryStatusReceived 监听器

public void changeMessageDeliveryStatus(String from, String to, String rec_id, Stanza stanza){
if(stanza instanceof Message) {
Message msg = (Message) stanza;

String jid = "";
if(msg.getType().equals(Message.Type.chat)){
jid = ActivityHelper.getBareJID(from);

}else if(msg.getType().equals(Message.Type.groupchat)){
jid = ActivityHelper.getSenderFromGroup(from);
}

String sender="";
long date = System.currentTimeMillis();

String stanza_id=stanza.getStanzaId();
int chat_type = 0;
int isPrivate = ChatConstants.ISPRIVATE_NO;

DelayInformation timestamp = (DelayInformation)msg.getExtension("delay", "urn:xmpp:delay");
if (timestamp == null)
timestamp = (DelayInformation)msg.getExtension("x", "jabber:x:delay");
if (timestamp != null)
date = timestamp.getStamp().getTime();

}
}

关于android - 如何实现延迟交付 (XEP-203) Smack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49138262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com