package com.team.zhuoke.utils; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.NetworkInfo.State; import android.telephony.TelephonyManager; /** * @author: 范建海 * @createTime: 2016/10/30 13:55 * @className: NetworkUtil * @description: 网络状态工具类 * @changed by: */ public class NetworkUtil { public static final int CHINA_MOBILE = 1; // 中国移动 public static final int CHINA_UNICOM = 2; // 中国联通 public static final int CHINA_TELECOM = 3; // 中国电信 public static final int SIM_OK = 0; public static final int SIM_NO = -1; public static final int SIM_UNKNOW = -2; public static final String CONN_TYPE_WIFI = "wifi"; public static final String CONN_TYPE_GPRS = "gprs"; public static final String CONN_TYPE_NONE = "none"; /** * 判断网络连接有效 * * @return 判断网络连接有效 */ public static boolean isNetworkAvailable(Context context) { if (context == null) { return false; } ConnectivityManager manager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo[] infos = manager.getAllNetworkInfo(); for (NetworkInfo info : infos) { if (info.isConnected()) { return true; } } return false; } /** * 判断当前网络是否是wifi网络 * * @param context 上下文 * @return boolean 是否是wifi网络 */ public static boolean isWifi(Context context) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); if (activeNetInfo != null && activeNetInfo.getType() == ConnectivityManager.TYPE_WIFI) { return true; } return false; } /** * 判断当前网络是否是3g网络 * * @param context 上下文 * @return 是否是3g网络 */ public static boolean is3G(Context context) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); if (activeNetInfo != null && activeNetInfo.getType() == ConnectivityManager.TYPE_MOBILE) { return true; } return false; } /** * 取得网络类型,wifi 2G 3G * * @param context 上下文 * @return WF 2G 3G 4G,或空 如果没网 */ public static String getWifiOr2gOr3G(Context context) { String networkType = ""; if (context != null) { try { ConnectivityManager cm = (ConnectivityManager) context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetInfo = cm.getActiveNetworkInfo(); if (activeNetInfo != null && activeNetInfo.isConnectedOrConnecting()) { // 有网 networkType = activeNetInfo.getTypeName().toLowerCase(); if (networkType.equals("wifi")) { networkType = "WF"; } else { // 移动网络 // //如果使用移动网络,则取得apn // apn = activeNetInfo.getExtraInfo(); // 将移动网络具体类型归一化到2G 3G 4G networkType = "2G"; // 默认是2G int subType = activeNetInfo.getSubtype(); switch (subType) { case TelephonyManager.NETWORK_TYPE_1xRTT: networkType = "3G"; break; case TelephonyManager.NETWORK_TYPE_CDMA: // IS95 break; case TelephonyManager.NETWORK_TYPE_EDGE: // 2.75 break; case TelephonyManager.NETWORK_TYPE_EVDO_0: networkType = "3G"; break; case TelephonyManager.NETWORK_TYPE_EVDO_A: networkType = "3G"; break; case TelephonyManager.NETWORK_TYPE_GPRS: // 2.5 break; case TelephonyManager.NETWORK_TYPE_HSDPA: // 3.5 networkType = "3G"; break; case TelephonyManager.NETWORK_TYPE_HSPA: // 3.5 networkType = "3G"; break; case TelephonyManager.NETWORK_TYPE_HSUPA: networkType = "3G"; break; case TelephonyManager.NETWORK_TYPE_UMTS: networkType = "3G"; break; case TelephonyManager.NETWORK_TYPE_EHRPD: networkType = "3G"; break; // ~ 1-2 Mbps case TelephonyManager.NETWORK_TYPE_EVDO_B: networkType = "3G"; break; // ~ 5 Mbps case TelephonyManager.NETWORK_TYPE_HSPAP: networkType = "3G"; break; // ~ 10-20 Mbps case TelephonyManager.NETWORK_TYPE_IDEN: break; // ~25 kbps case TelephonyManager.NETWORK_TYPE_LTE: networkType = "4G"; break; // ~ 10+ Mbps default: break; } } // end 移动网络if } // end 有网的if } catch (Exception e) { e.printStackTrace(); // TODO: handle exception } } return networkType; } /** * 程序启动时判断活动状态的网络类型 * * @param context 上下文 * @return 网络类型 */ public static String getNetworkType(Context context) { String result = null; ConnectivityManager connectivity = (ConnectivityManager) (context.getSystemService(Context.CONNECTIVITY_SERVICE)); if (connectivity == null) { result = null; } else { NetworkInfo[] info = connectivity.getAllNetworkInfo(); if (info != null) { for (int i = 0; i < info.length; i++) { if (info[i] != null) { State tem = info[i].getState(); if ((tem == State.CONNECTED || tem == State.CONNECTING)) { String temp = info[i].getExtraInfo(); result = info[i].getTypeName() + " " + info[i].getSubtypeName() + temp; break; } } } } } return result; } /** * 获得网络连接类型 * * @param context 上下文 * @return 网络连接类型 */ public static String getNetConnectType(Context context) { ConnectivityManager connManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); if (null == connManager) { return CONN_TYPE_NONE; } NetworkInfo info = null; info = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (null != info) { State wifiState = info.getState(); if (State.CONNECTED == wifiState) { return CONN_TYPE_WIFI; } } else { } info = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); if (null != info) { State mobileState = info.getState(); if (State.CONNECTED == mobileState) { return CONN_TYPE_GPRS; } } else { } return CONN_TYPE_NONE; } /** * 获得Proxy地址 * * @param context 上下文 * @return Proxy地址 */ public static String getProxy(Context context) { String proxy = null; ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivityManager != null) { NetworkInfo networkinfo = connectivityManager.getActiveNetworkInfo(); if (networkinfo != null && networkinfo.isAvailable()) { String stringExtraInfo = networkinfo.getExtraInfo(); if (stringExtraInfo != null && ("cmwap".equals(stringExtraInfo) || "uniwap".equals(stringExtraInfo))) { proxy = "10.0.0.172:80"; } else if (stringExtraInfo != null && "ctwap".equals(stringExtraInfo)) { proxy = "10.0.0.200:80"; } } } return proxy; } /* * 获取SIM卡状态 */ /** * 获取SIM卡状态 * * @param context 上下文 * @return SIM卡状态 */ public static int getSimState(Context context) { TelephonyManager telMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); int simState = telMgr.getSimState(); if (simState == TelephonyManager.SIM_STATE_READY) { return SIM_OK; } else if (simState == TelephonyManager.SIM_STATE_ABSENT) { return SIM_NO; } else { return SIM_UNKNOW; } } /* 获取运营商类型 * 此方法判断不是很全 * */ /** * 获取运营商类型,此方法判断不是很全 * * @param context 上下文 * @param nsp StringBuffer * @return 营商类型 */ public static int getNSP(Context context, StringBuffer nsp) { if (getSimState(context) == SIM_OK) { TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); String operator = tm.getNetworkOperatorName(); //String numeric = tm.getNetworkOperator(); if (operator == null || operator.length() == 0) { return SIM_UNKNOW; } if (nsp != null) { nsp.delete(0, nsp.length()); nsp.append(operator); } if (operator.compareToIgnoreCase("中国移动") == 0 || operator.compareToIgnoreCase("CMCC") == 0 || operator.compareToIgnoreCase("China Mobile") == 0 || operator.compareToIgnoreCase("46000") == 0 || operator.compareToIgnoreCase("46002") == 0) { return CHINA_MOBILE; } else if (operator.compareToIgnoreCase("中国电信") == 0 || operator.compareToIgnoreCase("China Telecom") == 0 || operator.compareToIgnoreCase("46003") == 0 || operator.compareToIgnoreCase("China Telcom") == 0) { return CHINA_TELECOM; } else if (operator.compareToIgnoreCase("中国联通") == 0 || operator.compareToIgnoreCase("China Unicom") == 0 || operator.compareToIgnoreCase("46001") == 0 || operator.compareToIgnoreCase("CU-GSM") == 0) { return CHINA_UNICOM; } else { return SIM_UNKNOW; } } else { return SIM_NO; } } }