最近做项目,用到判断网络连接状态,于是想写个能兼容多种网络模式的判断工具,如下直接上代码
import java.util.Hashtable;import android.content.Context;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.net.NetworkInfo.DetailedState;import android.util.Log;import com.rk.jcz.util.FeedBackException;/** * * @author 刘伟 * @date 2012-04-02 * @QQ 574613441 */public class NetConnectManager { private static final String LOG_TAG = "NetConnectManager" ;/** * 中国移动cmwap */ public static String CMWAP = "cmwap"; /** * 中国移动cmnet */ public static String CMNET = "cmnet"; //中国联通3GWAP设置 中国联通3G因特网设置 中国联通WAP设置 中国联通因特网设置 //3gwap 3gnet uniwap uninet /** * 3G wap 中国联通3gwap APN */ public static String GWAP_3 = "3gwap"; /** * 3G net 中国联通3gnet APN */ public static String GNET_3="3gnet"; /** * uni wap 中国联通uni wap APN */ public static String UNIWAP="uniwap"; /** * uni net 中国联通uni net APN */ public static String UNINET="uninet"; /** * 电信APN列表 * @author wudongdong * */ public static final String CTWAP="ctwap"; public static final String CTNET="ctnet"; private static Hashtable<String,String> networkTable = new Hashtable<String,String>();public static void switchNetType(Context context,String from,String to){ }public static boolean isNetWorkAvailable(Context context) { boolean isAvailable = false ;ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);if(connectivityManager!=null){ NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();if(networkInfo!=null){ DetailedState detailedState = networkInfo.getDetailedState();String detailedName = detailedState.name();if(detailedName==null){ detailedName = "";}networkTable.put("detailedName", detailedName);String extraInfo = networkInfo.getExtraInfo();if(extraInfo==null){ extraInfo = "";}networkTable.put("extraInfo", extraInfo);String reason = networkInfo.getReason();if(reason==null){ reason = "";}networkTable.put("reason", reason);NetworkInfo.State state = networkInfo.getState();String stateName = "";if(state!=null && state.name()!=null){ stateName=state.name();}
// 经过多次测试,只有stateName可以准确的判断网络连接是否正常if("CONNECTED".equalsIgnoreCase(stateName)){
isAvailable = true ;}networkTable.put("stateName", stateName);int subType = networkInfo.getSubtype();networkTable.put("subType", subType+"");String subtypeName = networkInfo.getSubtypeName();if(subtypeName==null){ subtypeName = "";}networkTable.put("subtypeName", subtypeName);int type = networkInfo.getType();String typeName = networkInfo.getTypeName();if(typeName==null){ typeName = "";}networkTable.put("typeName", typeName);Log.d(LOG_TAG,getLogString());}}return isAvailable;}public static String getLogString(){ StringBuilder sb = new StringBuilder();sb.append("detailedName="+networkTable.get("detailedName"));sb.append(" extraInfo="+networkTable.get("extraInfo"));sb.append(" reason="+networkTable.get("reason"));sb.append(" stateName="+networkTable.get("stateName"));sb.append(" subtypeName="+networkTable.get("subtypeName"));sb.append(" typeName="+networkTable.get("typeName"));return sb.toString();}public static String apnType(){ String apn = "" ;String netType = networkTable.get("typeName");if("CONNECTED".equals(networkTable.get("stateName"))){ if("wifi".equalsIgnoreCase(netType)){ apn = netType;}else if("mobile".equalsIgnoreCase(netType)){ netType = networkTable.get("extraInfo").toLowerCase(); apn = matchAPN(netType);}else{ new FeedBackException("UNKNOW networkType:::"+getLogString());}}else{ }return apn ;}public static String matchAPN(String currentName) { if("".equals(currentName) || null==currentName){ return ""; } currentName = currentName.toLowerCase(); if(currentName.startsWith(CMNET)) return CMNET; else if(currentName.startsWith(CMWAP)) return CMWAP; else if(currentName.startsWith(GNET_3)) return GNET_3; else if(currentName.startsWith(GWAP_3)) return GWAP_3; else if(currentName.startsWith(UNINET)) return UNINET; else if(currentName.startsWith(UNIWAP)) return UNIWAP; else if(currentName.startsWith(CTWAP)) return CTWAP; else if(currentName.startsWith(CTNET)) return CTNET; else if(currentName.startsWith("default")) return "default"; else return ""; } }