2015-05-11 22 views

Odpowiedz

3

Do tego trzeba edytować 2 Klasy Smack 4.1

  • Stanza w klasie (org.jivesoftware.smack.packet)
  • PacketParserUtils w klasie (org.jivesoftware .smack.util)

1. Stanza klasa

Definiowanie atrybutu niestandardowego (nick)

private String nick = null; 

Definiowanie Getter i Setery

public String getNick() { 
    return this.nick; 
} 

public void setNick(String paramString) { 
    this.nick = paramString; 
} 

Edit Stanza Konstruktor

protected Stanza(Stanza p) { 

    //add this line 
    nick = p.getNick(); 

} 

Edycja addCommonAttributes Sposób

protected void addCommonAttributes(XmlStringBuilder xml) { 

    //add this line 
    if(getNick()!= null) 
     xml.optAttribute("nick", getNick()); 
} 

2.PacketParserUtils klasa

Edit parseMessage metoda

public static Message parseMessage(XmlPullParser parser) 
       throws XmlPullParserException, IOException, SmackException { 

    //add this line 
    message.setNick(parser.getAttributeValue("", "nick")); 

} 

Teraz można po prostu ustawić nick i wysłać wiadomość następująco

Message message = new Message(); 
message.setType(Message.Type.chat); 
message.setStanzaId("123"); 
message.setTo(number); 

message.setNick("SHAYAN");  

try { 
connection.sendStanza(message); 
} catch (NotConnectedException e) { 
} 
+0

Cześć shanrais !, sklonowałem Smacka z githubu i zredagowałem dwie klasy. Ale nie powiedziałeś, jak wdrożyć klaps i tworzyć słoiki ponownie na Androida z prawej? –

+0

Zamiast tworzyć słoiki, to, co zrobiłem, zawiera kod źródłowy tego słoika, który edytowałem w moim projekcie. – shanraisshan

+0

czy możesz powiedzieć, które foldery wymagają kopii? Mam wiele folderów w projekcie https://github.com/igniterealtime/Smack na github, nie wiem, które foldery wymagają skopiowania do mojego projektu. Następujące słoiki zadeklarowane w mojej aplikacji gradle: skompiluj "org.igniterealtime.smack: smack-android-extensions: 4.1.1" skompiluj plik "org.igniterealtime.smack: smack-experimental: 4.1.1" skompiluj plik "org.igniterealtime. smack: smack-tcp: 4.1.1 ' –

4

Nie rób tego, nie jest to zalecane z jakiegoś powodu. Jest bardzo prawdopodobne, że niektóre serwery usuwają atrybut lub nawet całkowicie odmawiają obsługi tego pakietu. Zamiast tego zalecanym sposobem jest dodanie niestandardowego elementu.

W rzeczywistości takie rozszerzenie już istnieje, XEP-0172:

<message from='*' to='*' id='123' type='chat'> 
    <nick xmlns='http://jabber.org/protocol/nick'>KASHIF</nick> 
    <body>hello</body> 
</message> 

To może już pracować z innymi klientami lub bibliotek, więc jest to znacznie lepsze rozwiązanie.

+0

w moim przypadku będzie to awarię wersję iOS aplikacja –

+0

Następnie robisz coś bardzo złego. – xnyhps

+0

masz rację, ale to zależy od biblioteki. – Ricardo