第一步 配置
config.setReconnectionAllowed(true);
第二部 添加监听事件
connection.connect();if (connection.isConnected()) { connectionListener = new ViConnectionListener(); connection.addConnectionListener(connectionListener);}
事件代码:
public class ViConnectionListener implements ConnectionListener { @Override public void connectionClosed() { Log("connectionClosed--->"); } @Override public void connectionClosedOnError(Exception e) { Log("connectionClosedOnError--->" ); // 这里就是网络不正常或者被挤掉断线激发的事件 if (e.getMessage().contains("conflict")) { // 被挤掉线 Toast("被挤下线"); /* * log.e("来自连接监听,conn非正常关闭"); log.e("非正常关闭异常:"+arg0.getMessage()); * log.e(con.isConnected()); */ // 关闭连接,由于是被人挤下线,可能是用户自己,所以关闭连接,让用户重新登录是一个比较好的选择 XmppTool.getInstance().closeConnection(); // 接下来你可以通过发送一个广播,提示用户被挤下线,重连很简单,就是重新登录 } else if (e.getMessage().contains("Connection timed out")) {// 连接超时 // 不做任何操作,会实现自动重连 Log( "连接超时"); } } @Override public void reconnectingIn(int arg0) { Log("reconnectingIn--->"); } @Override public void reconnectionFailed(Exception arg0) { Log("reconnectionFailed--->" + arg0.getMessage()); arg0.printStackTrace(); } @Override public void reconnectionSuccessful() { Log("reconnectionSuccessful--->"); } private void Log(String msg){ Log.e("---->",msg); }}
第三步、最重要的一步
需在代码前静态加载ReconnectionManager,重连才能正常工作: (之前都忘了加这个 导致无法自动重连)
static{ try{ Class.forName("org.jivesoftware.smack.ReconnectionManager"); }catch(Exception e){ e.printStackTrace(); }}