package com.csq.thesceneryalong.receiver; 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 android.telephony.TelephonyManager; import android.util.Log; import com.csq.thesceneryalong.app.App; import com.csq.thesceneryalong.utils.DebugLog; public class NetworkReceiver extends BroadcastReceiver { private volatile static boolean isConnected = true; private volatile static NetType curNetType = NetType.unknown; @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub checkConnect(); } public void regist(Context context){ IntentFilter f = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"); context.registerReceiver(this, f); checkConnect(); } public void unRegist(Context context){ context.unregisterReceiver(this); } /** * 网络是否连接 */ public static boolean isConnected() { return isConnected; } /** * 获得当前网络类型 * @return */ public static NetType getCurNetType() { return curNetType; } private void checkConnect(){ boolean curConnected = isNetConnected(); NetType thisNetType = getNetType(); /*if(!isConnected && curConnected){ //网络由未连接到重新连接 } if(curNetType == NetType.wifi && thisNetType != NetType.wifi){ //以前是wifi,现在变为其他状态 }*/ NetworkReceiver.isConnected = curConnected; NetworkReceiver.curNetType = thisNetType; Log.d("", "NetworkConnectionChangeReceiver isConnected = "+isConnected +" curNetType = "+curNetType); } /** * 检测网络是否连接 */ private static boolean isNetConnected() { ConnectivityManager conManager = (ConnectivityManager) App.app .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = conManager.getActiveNetworkInfo(); if (networkInfo != null) return networkInfo.isAvailable(); return false; } /** * 获取网络类型 * @return unknown 0, gprs 1, 3g 2, wifi 3 */ private static NetType getNetType() { ConnectivityManager connectivityManager = (ConnectivityManager) App.app .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); if (activeNetInfo != null) { int type = activeNetInfo.getType(); if (type == ConnectivityManager.TYPE_WIFI) return NetType.wifi; else if (type == ConnectivityManager.TYPE_MOBILE) { type = activeNetInfo.getSubtype(); if (type >= TelephonyManager.NETWORK_TYPE_EVDO_0) //>=5(TelephonyManager.NETWORK_TYPE_EVDO_0)表示3G网络 return NetType.threeG; else return NetType.gprs; } } return NetType.unknown; } public static enum NetType { unknown, gprs, threeG, wifi } }