如何将自定义扩展(时间)添加到<message>标记?

Sus*_*ant 2 time android message xmpp

我正在尝试使用自定义数据包扩展向邮件添加时间扩展.似乎在发送消息时添加了时间.但在接收端,它显示为null.

这是我的数据包扩展类和EmbeddedExtensionProvider

public class TimestampExtension implements PacketExtension {

    public static final String ELEMENT = "timestamp";
    public static final String NAMESPACE = "urn:xmpp:timestamp";

    public String TIME = null;

    public TimestampExtension() {

    }

    public void setTime() {
        SimpleDateFormat time = new SimpleDateFormat("hh:mm a");
        Date dateTime = new Date();
        String strTime = time.format(dateTime);
        this.TIME = strTime;
    }

    public String getTime() {
        return TIME;
    }

    @Override
    public String getElementName() {
        return ELEMENT;
    }

    @Override
    public String getNamespace() {
        return NAMESPACE;
    }

    @Override
    public String toXML() {
        return "<" + ELEMENT + " xmlns='" + NAMESPACE + "'><time>" + TIME
            + "</time></" + ELEMENT + ">";
    }

    public static class Provider extends EmbeddedExtensionProvider {

        @Override
        protected PacketExtension createReturnExtension(String arg0,
            String arg1, Map<String, String> arg2,
            List<? extends PacketExtension> arg3) {

            return new TimestampExtension();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

注册提供商

ProviderManager.getInstance().addExtensionProvider(
            TimestampExtension.ELEMENT, TimestampExtension.NAMESPACE,
            new TimestampExtension.Provider());
Run Code Online (Sandbox Code Playgroud)

发送带扩展名的邮件

TimestampExtension timeExt = new TimestampExtension();
timeExt.setTime();
msg.addExtension(timeExt);
connection.sendPacket(msg);
Run Code Online (Sandbox Code Playgroud)

发件人的消息xml输出:

<message id="m55K5-7" to="testfirzan@sushant" type="chat">
<body>hi</body><request xmlns='urn:xmpp:receipts'/>
<timestamp xmlns='urn:xmpp:timestamp'>
<time>01:04 PM</time>
</timestamp>
Run Code Online (Sandbox Code Playgroud)

接收方的消息xml输出:

<message id="m55K5-7" to="testfirzan@sushant" from="testsushant@sushant/Smack" type="chat">
<body>hi</body><request xmlns='urn:xmpp:receipts'/>
<timestamp xmlns='urn:xmpp:timestamp'>
<time>null</time>
</timestamp>
Run Code Online (Sandbox Code Playgroud)

它应该显示发送时间元素.我做错了什么?

Was*_*mon 5

的Sushant的答案是正确的,但与最新的版本org.igniterealtime.smack:smack-android:4.2.0-beta2,他们已经改变了DefaultPacketExtension ,以StandardExtensionElement在消息中增加自定义元素.

添加扩展名的代码

//Creating Standard packet extension with name as 'timestamp' and urn as 'urn:xmpp:timestamp'
 StandardExtensionElement extTimeStamp = StandardExtensionElement.builder(
        "timestamp", "urn:xmpp:timestamp")
        .addAttribute("timestamp", String.valueOf(System.currentTimeMillis()))  //Setting value in extension
        .build();


//Add extension to message tag
message.addExtension(extTimeStamp);
Run Code Online (Sandbox Code Playgroud)

希望这将有助于未来的开发者.