【Android】XMPP不能自动重连的问题

第一步  配置

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();
    }
}


你可能感兴趣的:(【Android】XMPP不能自动重连的问题)