asmack本身封装了断线重连机制,但是有一点需要注意
在设置链接属性钱,要加载ReconnectionManager这个类,否则没有效果。
直接上代码:
第一步
- try {
- Class.forName("org.jivesoftware.smack.ReconnectionManager");
- } catch (Exception e1) {
- }
第二步 设置链接参数,启动重连功能
- ConnectionConfiguration configuration = new ConnectionConfiguration(
- Contents.HOST, Contents.PORT);
- configuration.setReconnectionAllowed(true);
第三步 链接后注册监听
- connection.connect();
- if (connection.isConnected()) {
- connection.addConnectionListener(connectionListener);
- }
- public static ConnectionListener connectionListener = new ConnectionListener() {
- @Override
- public void reconnectionSuccessful() {
- Log.i("connection", "reconnectionSuccessful");
- }
- @Override
- public void reconnectionFailed(Exception arg0) {
- Log.i("connection", "reconnectionFailed");
- }
- @Override
- public void reconnectingIn(int arg0) {
- Log.i("connection", "reconnectingIn");
- }
- @Override
- public void connectionClosedOnError(Exception arg0) {
- Log.i("connection", "connectionClosedOnError");
- }