package com.dpt.tbase.app.base.utils; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.telephony.TelephonyManager; public class NetWorkUtil { private static final String TAG = "NetWorkUtil"; private static final Class<NetWorkUtil> clazz = NetWorkUtil.class; /** Same to {@link ConnectivityManager#TYPE_WIMAX} (API 8) */ private static final int CM_TYPE_WIMAX = 6; /** Same to {@link ConnectivityManager#TYPE_ETHERNET} (API 13) */ private static final int CM_TYPE_ETHERNET = 9; /** Same to {@link ConnectivityManager#TYPE_MOBILE_MMS} (API 8) */ private static final int CM_TYPE_MOBILE_MMS = 2; /** Same to {@link ConnectivityManager#TYPE_BLUETOOTH} (API 8) */ private static final int CM_TYPE_BLUETOOTH = 7; /** Same to {@link TelephonyManager#NETWORK_TYPE_EVDO_B} (API 9) 5 Mbps */ private static final int TM_NETWORK_TYPE_EVDO_B = 12; /** Same to {@link TelephonyManager#NETWORK_TYPE_LTE} (API 11) 10+ Mbps */ private static final int TM_NETWORK_TYPE_LTE = 13; /** Same to {@link TelephonyManager#NETWORK_TYPE_EHRPD} (API 11) 1~2 Mbps */ private static final int TM_NETWORK_TYPE_EHRPD = 14; /** Same to {@link TelephonyManager#NETWORK_TYPE_HSPAP} (API 13) 10~20 Mbps */ private static final int TM_NETWORK_TYPE_HSPAP = 15; public static final int NET_TYPE_NONE = -1; // Don't touch! The following network types are defined by Server. public static final int NET_TYPE_WIFI = 1; public static final int NET_TYPE_2G = 2; public static final int NET_TYPE_3G = 3; public static final int NET_TYPE_MOBILE = 4; private static ConnectivityManager sCM; private static ConnectivityManager getConnectivityManager(Context context) { if (sCM == null) { sCM = (ConnectivityManager) context.getSystemService( Context.CONNECTIVITY_SERVICE); } return sCM; } /** * @param * @return One of values {@link #NET_TYPE_WIFI}, {@link #NET_TYPE_2G}, {@link #NET_TYPE_3G} or * {@link #NET_TYPE_NONE} */ public static int getNetworkType(Context context) { ConnectivityManager connMgr = getConnectivityManager(context); NetworkInfo netInfo = connMgr.getActiveNetworkInfo(); if (netInfo != null) { int type = netInfo.getType(); int subType = netInfo.getSubtype(); if (type == ConnectivityManager.TYPE_WIFI || type == CM_TYPE_WIMAX || type == CM_TYPE_ETHERNET) { return NET_TYPE_WIFI; } else if (type == ConnectivityManager.TYPE_MOBILE /* * this patch for fix in some devices type when apn connected, report type is * TYPE_BLUETOOTH and has subtype. tested on CoolPad 7260+ */ || (type == CM_TYPE_BLUETOOTH && subType > 0)) { if (subType == TelephonyManager.NETWORK_TYPE_UMTS || subType == TelephonyManager.NETWORK_TYPE_EVDO_0 || subType == TelephonyManager.NETWORK_TYPE_EVDO_A || subType == TelephonyManager.NETWORK_TYPE_HSDPA || subType == TelephonyManager.NETWORK_TYPE_HSUPA || subType == TelephonyManager.NETWORK_TYPE_HSPA || subType == TM_NETWORK_TYPE_EVDO_B || subType == TM_NETWORK_TYPE_LTE || subType == TM_NETWORK_TYPE_EHRPD || subType == TM_NETWORK_TYPE_HSPAP) { return NET_TYPE_3G; } return NET_TYPE_2G; // Take other data types as 2G } else if (type == CM_TYPE_MOBILE_MMS || type == CM_TYPE_BLUETOOTH) { // when mms and bluetooth, don't recognize as mobile return NET_TYPE_NONE; } return NET_TYPE_2G; // Take unknown networks as 2G } return NET_TYPE_NONE; } /** * @param context * @return One of the values {@link #NET_TYPE_NONE} or {@link #NET_TYPE_WIFI} or {@link #NET_TYPE_MOBILE} */ public static int getSimpleNetworkType(Context context) { ConnectivityManager connMgr = getConnectivityManager(context); NetworkInfo netInfo = connMgr.getActiveNetworkInfo(); if (netInfo != null) { int type = netInfo.getType(); if (type == ConnectivityManager.TYPE_WIFI || type == CM_TYPE_WIMAX || type == CM_TYPE_ETHERNET) { return NET_TYPE_WIFI; } else if (type == ConnectivityManager.TYPE_MOBILE) { return NET_TYPE_MOBILE; } else if (type == CM_TYPE_MOBILE_MMS || type == CM_TYPE_BLUETOOTH) { return NET_TYPE_NONE; } else { // Take unknown networks as mobile network return NET_TYPE_MOBILE; } } return NET_TYPE_NONE; } /** * 检查网络 * * @param context * @return */ public static boolean checkNetWork(Context context) { // ConnectivityManager//系统服务 // ①判断WIFI联网情况 boolean isWifi = isWifi(context); // ②判断MOBILE联网情况 boolean isMobile = isMobile(context); if (!isWifi && !isMobile) { // 如果都不能联网,提示用户 return false; } return true; } /** * 判断wifi是否处于连接状态 */ public static boolean isWifi(Context context) { ConnectivityManager manager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); // NetworkInfo:支持WIFI和MOBILE NetworkInfo networkInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (networkInfo != null) { return networkInfo.isConnected(); } return false; } /** * 判断Mobile是否处于连接状态 */ public static boolean isMobile(Context context) { ConnectivityManager cm = getConnectivityManager(context); if (cm == null) { return false; } // NetworkInfo:支持WIFI和MOBILE NetworkInfo networkInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); if (networkInfo != null) { return networkInfo.isConnected(); } return false; } }