package com.mfh.comna.network; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.NetworkInfo; import com.mfh.comna.bizz.BizApplication; import com.mfh.comna.comn.logic.IService; import com.mfh.comna.comn.logic.ServiceFactory; import java.util.HashSet; import java.util.Iterator; import java.util.Set; /** * 网络状态服务监听类 * Created by Administrator on 14-6-12. */ public class NetStateService implements IService { private static String serviceName = NetStateService.class.getName(); private boolean connected = true; /** * 网络事件回调接口 */ public interface NetStateListener { /** * 接通时执行 */ void onConnected(); /** * 断开时执行 */ void onDisConnected(); } private Set<NetStateListener> listeners = new HashSet<NetStateListener>(); /** * 增加一个网络监听事件 * @param listener * @param connectivityType 哪种网络类型 */ public static void addNetListener(NetStateListener listener, int... connectivityType) { NetStateService ns = ServiceFactory.getService(serviceName); ns.addListener(listener, connectivityType); } /** * 增加一个监听事件 * @param listener * @param connectivityType 对哪种网络感兴趣,备用 */ public void addListener(NetStateListener listener, int... connectivityType) { synchronized (listeners) { listeners.add(listener); } if (connected) { listener.onConnected(); } else listener.onDisConnected(); } /** * 移除一个监听事件 * @param listener */ public void removeListener(NetStateListener listener) { synchronized (listeners) { listeners.remove(listener); } } /** * 直接注册 */ public static void registerReceiver() { NetStateService ns = ServiceFactory.getService(serviceName); ns.registerNetStateReceiver(); } /** * 注册网络状态事件接收器 */ public void registerNetStateReceiver() { IntentFilter filter = new IntentFilter(); filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); BroadcastReceiver networkStateReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo workInfo = connManager.getActiveNetworkInfo(); NetworkInfo.State state = null; if (workInfo != null) state = workInfo.getState(); //ConnectivityManager.TYPE_MOBILE, ConnectivityManager.TYPE_WIFI if (state != null && NetworkInfo.State.CONNECTED == state) { connected = true; synchronized (listeners) { Iterator<NetStateListener> iter = listeners.iterator(); while (iter.hasNext()) { iter.next().onConnected(); } } } else { connected = true; synchronized (listeners) { Iterator<NetStateListener> iter = listeners.iterator(); while (iter.hasNext()) { iter.next().onDisConnected(); } } } } }; BizApplication.getAppContext().registerReceiver(networkStateReceiver, filter); } }