2014-01-28 1 views
3

Я пытаюсь отправить чат с помощью Smack. Вот кодКак установить пользовательскую строку Message.Type в Smack?

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

Это сообщение появляется в конце получателя с типом = "chat". Как изменить этот тип сообщения на пользовательскую строку, например. "My_custom_string"?

Я попробовал это, но это легко понять, почему следующий не будет работать

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

Если вы нашли себя когда-либо в ситуации, когда вам нужно установить строку типа пользовательских сообщений, то вы должны пересмотреть свой дизайн! Это не способ изменения XMPP. Например, вы можете просто добавить пользовательский элемент под элементом сообщения (пакетное расширение в smack). – Flow

+0

Как вы решили проблему? или просто расширяет сообщение, чтобы добавить пользовательский элемент? – Stony

+0

Я решил это, используя поле subject для указания настраиваемых типов. Более общим решением было бы реализовать предложение Flow –

ответ

0

Message является окончательным класс привкусом, также следует протокол XMPP для сообщения Stanza, так что вы не можете изменить тип поле в сообщении. Но мы не можем прекратить сдаваться, здесь вы можете попробовать небольшой трюк, добавив свое пользовательское расширение в MessageStanza. Вам просто нужно создать ExtensionElement, используя архитектуру поставщика smack, а затем добавить его в Message Packet, вызвав метод addExtension() на Message Object.

это будет выглядеть следующим образом:

<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 в привкусе.

, чтобы узнать больше о Смак Provider архитектуры следовать this link