package org.jivesoftware.smack; import org.jivesoftware.smack.util.DNSUtil; import org.jivesoftware.smack.util.dns.DNSJavaResolver; import org.jivesoftware.smackx.ConfigureProviderManager; import org.jivesoftware.smackx.InitStaticCode; import org.xbill.DNS.ResolverConfig; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; public class SmackAndroid { private static SmackAndroid sSmackAndroid = null; private BroadcastReceiver mConnectivityChangedReceiver; private Context mCtx; private SmackAndroid(Context ctx) { mCtx = ctx; DNSUtil.setDNSResolver(DNSJavaResolver.getInstance()); InitStaticCode.initStaticCode(ctx); ConfigureProviderManager.configureProviderManager(); maybeRegisterReceiver(); } public static SmackAndroid init(Context ctx) { if (sSmackAndroid == null) { sSmackAndroid = new SmackAndroid(ctx); } else { sSmackAndroid.maybeRegisterReceiver(); } return sSmackAndroid; } public void onDestroy() { if (mConnectivityChangedReceiver != null) { mCtx.unregisterReceiver(mConnectivityChangedReceiver); mConnectivityChangedReceiver = null; } } private void maybeRegisterReceiver() { if (mConnectivityChangedReceiver == null) { mConnectivityChangedReceiver = new ConnectivtyChangedReceiver(); mCtx.registerReceiver(mConnectivityChangedReceiver, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE")); } } class ConnectivtyChangedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ResolverConfig.refresh(); } } }