2014-01-28 62 views
3

我正在嘗試使用Smack發送聊天。以下是密碼如何在Smack中設置自定義的Message.Type字符串?

Chat chat = connection.getChatManager().createChat("[email protected]", this); 
    Message _msg = new Message(); 
    _msg.setBody("Hello this is a test message"); 
    chat.sendMessage(_msg); 

此消息在收件人的末尾以type =「chat」顯示。我該如何將此消息類型更改爲自定義字符串,例如「my_custom_string」?

我試過,但它是很容易明白爲什麼以下將無法正常工作

Message.Type _type = Message.Type.fromString("my_custom_string"); 
    _msg.setType(_type); 
+3

如果你發現自己曾經在您需要設置一個自定義消息類型的字符串的情況,那麼你應該重新考慮你的設計!這不是XMPP應該如何修改的方式。例如,您可以簡單地在消息元素下添加一個自定義元素(一個包裝中的packetextension)。 – Flow

+0

你是如何解決這個問題的?或者只是擴展消息以添加自定義元素? – Stony

+0

我通過使用主題字段來指定自定義類型來解決它。更通用的解決方案是實施Flow的建議 –

回答

0

Message是嫌final類,也是它遵循消息節XMPP協議,所以你不能修改類型消息中的字段。 但是我們不能放棄放棄,在這裏你可以嘗試一個小竅門,通過添加你自定義的擴展名MessageStanza你只需要使用smack提供者架構創建一個ExtensionElement,然後通過調用addExtension()方法Message對象將其添加到消息包中。

這將是這樣的:

<message from="[email protected]" to="[email protected]" type="chat"> 
    <body>Hi this is demo 1</body> 
    <my_custom_element xmlns="some_name_space" attributr="some_attribute">Some custom message</my_custom_element> 
</message> 

您可以將多個Extenstion任何數據包/ Stanza在咂嘴。

更多地瞭解啪提供商架構遵循this link

相關問題