package com.openfire.service; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smack.packet.Presence; import com.openfire.manager.XmppConnection; import com.partynetwork.dataprovider.util.T; import com.partynetwork.iparty.app.AppContext; import com.partynetwork.iparty.imessage.OpenfireConstant; import com.partynetwork.iparty.login.OpenfireLoginTask; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.IBinder; /** * * 重连接服务. * * @author shimiso */ public class ReConnectService extends Service { private Context context; private ConnectivityManager connectivityManager; private NetworkInfo info; @Override public void onCreate() { context = this; IntentFilter mFilter = new IntentFilter(); mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(reConnectionBroadcastReceiver, mFilter); super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { return super.onStartCommand(intent, flags, startId); } @Override public IBinder onBind(Intent intent) { return null; } @Override public void onDestroy() { unregisterReceiver(reConnectionBroadcastReceiver); super.onDestroy(); } BroadcastReceiver reConnectionBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) { connectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); XMPPConnection connection = XmppConnection.getInstance() .getConnection(); info = connectivityManager.getActiveNetworkInfo(); if (info != null && info.isAvailable()) { if (!connection.isConnected()) { reConnect(connection); } else { sendInentAndPre(OpenfireConstant.RECONNECT_STATE_SUCCESS); //T.showLong(context, "用户已上线!"); } } else { sendInentAndPre(OpenfireConstant.RECONNECT_STATE_FAIL); //T.showLong(context, "网络断开,用户已离线!"); } } } }; /** * * 递归重连,直连上为止. * * @author shimiso */ public void reConnect(XMPPConnection connection) { try { connection.connect(); if (connection.isConnected()) { Presence presence = new Presence(Presence.Type.available); connection.sendPacket(presence); AppContext acontext=(AppContext) context.getApplicationContext(); OpenfireLoginTask task = new OpenfireLoginTask(this, acontext.getLoginUid() + "", acontext.getLoginInfo() .getPwd()); task.execute(); //T.showLong(context, "用户已上线!"); } } catch (XMPPException e) { reConnect(connection); } } private void sendInentAndPre(boolean isSuccess) { Intent intent = new Intent(); SharedPreferences preference = getSharedPreferences( OpenfireConstant.LOGIN_SET, 0); // 保存在线连接信息 preference.edit().putBoolean(OpenfireConstant.IS_ONLINE, isSuccess) .commit(); intent.setAction(OpenfireConstant.ACTION_RECONNECT_STATE); intent.putExtra(OpenfireConstant.RECONNECT_STATE, isSuccess); sendBroadcast(intent); } }