2017-07-09 54 views
0

我現在可以發送masseges,我的下一步是接收傳入的消息。我正在尋找很多方法。他們中的大多數在我的版本中被貶損或不可用。即時通訊使用smack 4.2.0。也許有人可以告訴我如何以及在哪裏可以實現捕獲所有傳入消息的偵聽器? 這裏我的代碼:sma 4.2傳入消息

MainActivity.class

包com.example.saddam.xmpp3;

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

import org.jivesoftware.smack.AbstractXMPPConnection; 

import org.jxmpp.stringprep.XmppStringprepException; 

public class MainActivity extends AppCompatActivity { 
    Button b1; 
    TextView chat; 
    final connectXmpp con = new connectXmpp(); 

    public MainActivity() throws XmppStringprepException { 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 


     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     con.execute(); 

     b1 = (Button) findViewById(R.id.button); 
     chat = (TextView) findViewById(R.id.editText); 


     b1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       AbstractXMPPConnection conn=con.getConnection(); 
       con.sendMessage(conn,chat); 


      } 
     }); 


    } 
    } 

connectXmpp.class

import org.jivesoftware.smack.packet.Message; 
import org.jivesoftware.smack.tcp.XMPPTCPConnection; 
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration; 
import org.jxmpp.jid.EntityBareJid; 
import org.jxmpp.jid.impl.JidCreate; 
import org.jxmpp.stringprep.XmppStringprepException; 


import java.io.IOException; 


/** 
* Created by saddam on 08.07.2017. 
*/ 

public class connectXmpp extends AsyncTask<Void,Void,Void> { 
    static AbstractXMPPConnection conn2= null; 


    final EntityBareJid jid = JidCreate.entityBareFrom("[email protected]"); 

    public connectXmpp() throws XmppStringprepException { 
    } 

    @Override 
    protected Void doInBackground(Void... voids) { 

     XMPPTCPConnectionConfiguration config = null; 
     try { 
      config = XMPPTCPConnectionConfiguration.builder() 
        .setUsernameAndPassword("username", "password") 
        .setXmppDomain("dismail.de") 
        .setHost("dismail.de") 
        .setPort(5222).setKeystoreType(null) 
        .build(); 
     } catch (XmppStringprepException e) { 
      e.printStackTrace(); 
     } 
     conn2 = new XMPPTCPConnection(config); 

     try { 
      conn2.connect(); 
      conn2.login(); 


     } catch (InterruptedException e1) { 
      e1.printStackTrace(); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } catch (SmackException e1) { 
      e1.printStackTrace(); 
     } catch (XMPPException e1) { 
      e1.printStackTrace(); 
     } 




     return null; 
    } 



    @Override 
    protected void onProgressUpdate(Void... values) { 
     super.onProgressUpdate(values); 
    } 

    @Override 
    protected void onPostExecute(Void aVoid) { 
     super.onPostExecute(aVoid); 
    } 

    public AbstractXMPPConnection getConnection(){ 
     return conn2; 
    } 

    public ChatManager getChatMana(AbstractXMPPConnection c){ 
     ChatManager chatManager = ChatManager.getInstanceFor(c); 
     return chatManager; 
    } 

    public void sendMessage(final AbstractXMPPConnection c, TextView t){ 
     ChatManager chatManager = null; 

     Message newMessage = null; 
     chatManager = ChatManager.getInstanceFor(c); 

     try { 


      Chat chat = chatManager.chatWith(jid); 
      newMessage = new Message(); 
      newMessage.setBody(t.getText().toString()); 
      chat.send(newMessage); 


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

    } 

} 

回答

2

在拍擊4.2,你可以使用以下接口:IncomingChatMessageListener

示例代碼:

ChatManager chatManager = ChatManager.getInstanceFor(mConnection); 
chatManager.addIncomingListener(new IncomingChatMessageListener() { 
      @Override 
      public void newIncomingMessage(EntityBareJid from, Message message, Chat chat) { 
       // Your code to handle the incoming message 
      } 
     }); 

您也可以到下面的語句添加到您的XMPPTCPConnectionConfiguration:

.setSendPresence(true) 

如果存在虛假或不設置,則所有收到的郵件會保存在離線消息存儲中,並且該界面不會被觸發。

希望這會有所幫助。

+0

其工作正常一對一聊天..但不工作羣聊。有沒有其他代碼組傳入消息? – user392117

+0

當然,對於這種情況你可以使用MutliUserChat。以下是文檔:https://docs.jivesoftware.com/smack/latest/javadoc/org/jivesoftware/smackx/muc/MultiUserChat.html – Ghostw4lk