App网络管理

安卓开发一般都需要进行日志管理,常用操作老司机已为你封装完毕,你可以用这份工具进行管理,具体可以查看源码,现在为你开车,Demo传送门

站点

系统日志输出工具类 → AppKeyBoardMgr

getNetworkState                  : 获取当前手机连接的网络类型
isNetworkConnected           : 判断网络是否连接
openNetSetting                    : 打开网络设置界面
is3gConnected                    : 检测3G是否连接
getNetworkTypeName         : 获取网络类型名称
getCurrentNetworkState       : 获取当前网络的状态
getCurrentNetworkSubtype  : 获取当前网络的具体类型
isConnectedByState             : 判断当前网络是否已经连接
isConnectingByState            : 判断当前网络是否正在连接
isDisconnectedByState        : 判断当前网络是否已经断开
isDisconnectingByState       : 判断当前网络是否正在断开
isSuspendedByState            : 判断当前网络是否已经暂停
isUnknownByState               : 判断当前网络是否处于未知状态中
isBluetoothByType               : 判断当前网络的类型是否是蓝牙
isDummyByType                  : 判断当前网络的类型是否是虚拟网络
isEthernetByType                 : 判断当前网络的类型是否是ETHERNET
isMobileByType                    : 判断当前网络的类型是否是移动网络
isMobileDunByType            : 判断当前网络的类型是否是MobileDun
isMobileHipriByType           : 判断当前网络的类型是否是MobileHipri
isMobileMmsByType           : 判断当前网络的类型是否是MobileMms
isMobileSuplByType            : 判断当前网络的类型是否是MobileSupl
isWifiByType                        : 判断当前网络的类型是否是Wifi
isWimaxByType                   : 判断当前网络的类型是否是Wimax
is1XRTTBySubtype             : 判断当前网络的具体类型是否是1XRTT
isCDMABySubtype              : 判断当前网络的具体类型是否是CDMA(Either IS95A or IS95B)
isEDGEBySubtype               : 判断当前网络的具体类型是否是EDGE
isEHRPDBySubtype             :  判断当前网络的具体类型是否是EHRPD
isEVDO_0BySubtype           : 判断当前网络的具体类型是否是EVDO_0
isEVDO_ABySubtype          : 判断当前网络的具体类型是否是EVDO_A
isEVDO_BBySubtype          : 判断当前网络的具体类型是否是EDGE
isGPRSBySubtype              : 判断当前网络的具体类型是否是GPRS
isHSDPABySubtype             : 判断当前网络的具体类型是否是HSDPA
isHSPABySubtype               : 判断当前网络的具体类型是否是HSPA
isHSPAPBySubtype             : 判断当前网络的具体类型是否是HSPAP
isHSUPABySubtype             : 判断当前网络的具体类型是否是HSUPA
isIDENBySubtype                 : 判断当前网络的具体类型是否是IDEN
isLTEBySubtype                   : 判断当前网络的具体类型是否是LTE
isUMTSBySubtype                : 判断当前网络的具体类型是否是UMTS
isUNKNOWNBySubtype       : 判断当前网络的具体类型是否是UNKNOWN
isChinaMobile2G                   : 判断当前网络是否是中国移动2G网络
isChinaUnicom2G                  : 判断当前网络是否是中国联通2G网络
isChinaUnicom3G                  : 判断当前网络是否是中国联通3G网络
isChinaTelecom2G                 : 判断当前网络是否是中国电信2G网络
isChinaTelecom3G                 : 判断当前网络是否是中国电信3G网络
getWifiState                            : 获取Wifi的状态,需要ACCESS_WIFI_STATE权限
isWifiOpen                              : 判断Wifi是否打开,需要ACCESS_WIFI_STATE权限
setWifi                                     : 设置Wifi,需要CHANGE_WIFI_STATE权限
isMobileNetworkOpen             : 判断移动网络是否打开,需要ACCESS_NETWORK_STATE权限
getIpAddress                            : 获取本机IP地址
setDataEnabled                       : 设置数据流量状态
getWifiScanResults                 : 获取wifi列表
getScanResultsByBSSID        : 过滤扫描结果
getWifiConnectionInfo             : 获取wifi连接信息
getProxy                                  : 获得Proxy地址

具体路线

public class AppNetworkMgr {
//未找到合适匹配网络类型
public static final int TYPE_NO = 0;

//中国移动CMNET网络(中国移动GPRS接入方式之一, 主要为PC、笔记本电脑、PDA设立)
public static final int TYPE_MOBILE_CMNET = 1;

//中国移动CMWAP网络(中国移动GPRS接入方式之一,主要为手机WAP上网而设立)
public static final int TYPE_MOBILE_CMWAP = 2;

//中国联通UNIWAP网络(中国联通划分GPRS接入方式之一, 主要为手机WAP上网而设立)
public static final int TYPE_MOBILE_UNIWAP = 3;

//中国联通3GWAP网络
public static final int TYPE_MOBILE_3GWAP = 4;

//中国联通3HNET网络
public static final int TYPE_MOBLIE_3GNET = 5;

//中国联通UNINET网络(中国联通划分GPRS接入方式之一, 主要为PC、笔记本电脑、PDA设立)
public static final int TYPE_MOBILE_UNINET = 6;

//中国电信CTWAP网络
public static final int TYPE_MOBILE_CTWAP = 7;

//中国电信CTNET网络
public static final int TYPE_MOBILE_CTNET = 8;

//WIFI网络
public static final int TYPE_WIFI = 10;

/**
 * 网络类型 - 无连接
 */
public static final int NETWORK_TYPE_NO_CONNECTION = -1231545315;

public static final String NETWORK_TYPE_WIFI = "wifi";
public static final String NETWORK_TYPE_3G = "eg";
public static final String NETWORK_TYPE_2G = "2g";
public static final String NETWORK_TYPE_WAP = "wap";
public static final String NETWORK_TYPE_UNKNOWN = "unknown";
public static final String NETWORK_TYPE_DISCONNECT = "disconnect";

/**
 * 获取当前手机连接的网络类型
 *
 * @param context 上下文
 * @return int 网络类型
 */
public static int getNetworkState(Context context) {
    //获取ConnectivityManager对象
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    //获得当前网络信息
    NetworkInfo networkInfo = cm.getActiveNetworkInfo();
    if (networkInfo != null && networkInfo.isAvailable()) {
        //获取网络类型
        int currentNetWork = networkInfo.getType();
        //手机网络类型
        if (currentNetWork == ConnectivityManager.TYPE_MOBILE) {
            if(networkInfo.getExtraInfo() != null){
                if (networkInfo.getExtraInfo().equals("cmnet")) {
                    AppLogMessageMgr.i("AppNetworkMgr", "当前网络为中国移动CMNET网络");
                    return TYPE_MOBILE_CMNET;
                }
                if (networkInfo.getExtraInfo().equals("cmwap")) {
                    AppLogMessageMgr.i("AppNetworkMgr", "当前网络为中国移动CMWAP网络");
                    return TYPE_MOBILE_CMWAP;
                }
                if(networkInfo.getExtraInfo().equals("uniwap")) {
                    AppLogMessageMgr.i("AppNetworkMgr", "当前网络为中国联通UNIWAP网络");
                    return TYPE_MOBILE_UNIWAP;
                }
                if(networkInfo.getExtraInfo().equals("3gwap")) {
                    AppLogMessageMgr.i("AppNetworkMgr", "当前网络为中国联通3GWAP网络");
                    return TYPE_MOBILE_3GWAP;
                }
                if(networkInfo.getExtraInfo().equals("3gnet")) {
                    AppLogMessageMgr.i("AppNetworkMgr", "当前网络为中国联通3GNET网络");
                    return TYPE_MOBLIE_3GNET;
                }
                if(networkInfo.getExtraInfo().equals("uninet")) {
                    AppLogMessageMgr.i("AppNetworkMgr", "当前网络为中国联通UNINET网络");
                    return TYPE_MOBILE_UNINET;
                }
                if(networkInfo.getExtraInfo().equals("ctwap")) {
                    AppLogMessageMgr.i("AppNetworkMgr", "当前网络为中国电信CTWAP网络");
                    return TYPE_MOBILE_UNINET;
                }
                if(networkInfo.getExtraInfo().equals("ctnet")) {
                    AppLogMessageMgr.i("AppNetworkMgr", "当前网络为中国电信CTNET网络");
                    return TYPE_MOBILE_UNINET;
                }
            }
            //WIFI网络类型
        }else if (currentNetWork == ConnectivityManager.TYPE_WIFI) {
            AppLogMessageMgr.i("AppNetworkMgr", "当前网络为WIFI网络");
            return TYPE_WIFI;
        }
    }
    AppLogMessageMgr.i("AppNetworkMgr-->>NetworkUtils", "当前网络为不是我们考虑的网络");
    return TYPE_NO;
}

/**
 * 判断网络是否连接
 *
 * @param context 上下文
 * @return boolean 网络连接状态
 */
public static boolean isNetworkConnected(Context context) {
    if (context != null) {
        ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
        //获取连接对象
        if (mNetworkInfo != null) {
            //判断是TYPE_MOBILE网络
            if(ConnectivityManager.TYPE_MOBILE == mNetworkInfo.getType()){
                AppLogMessageMgr.i("AppNetworkMgr", "网络连接类型为:TYPE_MOBILE");
                //判断移动网络连接状态
                State STATE_MOBILE = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
                if (STATE_MOBILE == State.CONNECTED) {
                    AppLogMessageMgr.i("AppNetworkMgrd", "网络连接类型为:TYPE_MOBILE, 网络连接状态CONNECTED成功!");
                    return mNetworkInfo.isAvailable();
                }
            }
            //判断是TYPE_WIFI网络
            if(ConnectivityManager.TYPE_WIFI == mNetworkInfo.getType()){
                AppLogMessageMgr.i("AppNetworkMgr", "网络连接类型为:TYPE_WIFI");
                //判断WIFI网络状态
                State STATE_WIFI = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
                if (STATE_WIFI == State.CONNECTED) {
                    AppLogMessageMgr.i("AppNetworkMgr", "网络连接类型为:TYPE_WIFI, 网络连接状态CONNECTED成功!");
                    return mNetworkInfo.isAvailable();
                }
            }
        }
    }
    return false;
}

/**
 * 判断网络是否连接
 *
 * @param activity Activity
 * @return boolean 网络连接状态
 */
public static boolean isNetworkConnected(Activity activity){
    boolean falg = false;
    ConnectivityManager mConnectivityManager = (ConnectivityManager) activity.getApplicationContext().getSystemService("connectivity");
    if (mConnectivityManager == null){
        return falg;
    }
    NetworkInfo[] arrayOfNetworkInfo = mConnectivityManager.getAllNetworkInfo();
    if (arrayOfNetworkInfo != null){
        for (int j = 0; j < arrayOfNetworkInfo.length; j++){
            if (arrayOfNetworkInfo[j].getState() == State.CONNECTED){
                falg = true;
                break;
            }
        }
    }
    return falg;
}

/**
 * 打开网络设置界面
 *
 * @param activity Activity
 */
public static void openNetSetting(Activity activity) {
    Intent intent = new Intent("/");
    ComponentName cm = new ComponentName("com.android.settings", "com.android.settings.WirelessSettings");
    intent.setComponent(cm);
    intent.setAction("android.intent.action.VIEW");
    activity.startActivityForResult(intent, 0);
}

/**
 * 检测3G是否连接
 *
 * @param context 上下文
 * @return 结果
 */
public static boolean is3gConnected(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (cm != null) {
        NetworkInfo networkInfo = cm.getActiveNetworkInfo();
        if (networkInfo != null
            && networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
            return true;
        }
    }
    return false;
}

/**
 * Get network type
 *
 * @param context context
 * @return NetworkType
 */
public static int getNetworkType(Context context) {
    ConnectivityManager connectivityManager
        = (ConnectivityManager) context.getSystemService(
        Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connectivityManager == null
        ? null
        : connectivityManager.getActiveNetworkInfo();
    return networkInfo == null ? -1 : networkInfo.getType();
}


/**
 * Get network type name
 *
 * @param context context
 * @return NetworkTypeName
 */
public static String getNetworkTypeName(Context context) {
    ConnectivityManager manager
        = (ConnectivityManager) context.getSystemService(
        Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo;
    String type = NETWORK_TYPE_DISCONNECT;
    if (manager == null ||
        (networkInfo = manager.getActiveNetworkInfo()) == null) {
        return type;
    }
    ;

    if (networkInfo.isConnected()) {
        String typeName = networkInfo.getTypeName();
        if ("WIFI".equalsIgnoreCase(typeName)) {
            type = NETWORK_TYPE_WIFI;
        }
        else if ("MOBILE".equalsIgnoreCase(typeName)) {
            String proxyHost = android.net.Proxy.getDefaultHost();
            type = TextUtils.isEmpty(proxyHost)
                ? (isFastMobileNetwork(context)
                ? NETWORK_TYPE_3G
                : NETWORK_TYPE_2G)
                : NETWORK_TYPE_WAP;
        }
        else {
            type = NETWORK_TYPE_UNKNOWN;
        }
    }
    return type;
}


/**
 * Whether is fast mobile network
 *
 * @param context context
 * @return FastMobileNetwork
 */
private static boolean isFastMobileNetwork(Context context) {
    TelephonyManager telephonyManager
        = (TelephonyManager) context.getSystemService(
        Context.TELEPHONY_SERVICE);
    if (telephonyManager == null) {
        return false;
    }

    switch (telephonyManager.getNetworkType()) {
        case TelephonyManager.NETWORK_TYPE_1xRTT:
            return false;
        case TelephonyManager.NETWORK_TYPE_CDMA:
            return false;
        case TelephonyManager.NETWORK_TYPE_EDGE:
            return false;
        case TelephonyManager.NETWORK_TYPE_EVDO_0:
            return true;
        case TelephonyManager.NETWORK_TYPE_EVDO_A:
            return true;
        case TelephonyManager.NETWORK_TYPE_GPRS:
            return false;
        case TelephonyManager.NETWORK_TYPE_HSDPA:
            return true;
        case TelephonyManager.NETWORK_TYPE_HSPA:
            return true;
        case TelephonyManager.NETWORK_TYPE_HSUPA:
            return true;
        case TelephonyManager.NETWORK_TYPE_UMTS:
            return true;
        case TelephonyManager.NETWORK_TYPE_EHRPD:
            return true;
        case TelephonyManager.NETWORK_TYPE_EVDO_B:
            return true;
        case TelephonyManager.NETWORK_TYPE_HSPAP:
            return true;
        case TelephonyManager.NETWORK_TYPE_IDEN:
            return false;
        case TelephonyManager.NETWORK_TYPE_LTE:
            return true;
        case TelephonyManager.NETWORK_TYPE_UNKNOWN:
            return false;
        default:
            return false;
    }
}


/**
 * 获取当前网络的状态
 *
 * @param context 上下文
 * @return 当前网络的状态。具体类型可参照NetworkInfo.State.CONNECTED、NetworkInfo.State.CONNECTED.DISCONNECTED等字段。当前没有网络连接时返回null
 */
public static NetworkInfo.State getCurrentNetworkState(Context context) {
    NetworkInfo networkInfo
        = ((ConnectivityManager) context.getSystemService(
        Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
    return networkInfo != null ? networkInfo.getState() : null;
}


/**
 * 获取当前网络的类型
 *
 * @param context 上下文
 * @return 当前网络的类型。具体类型可参照ConnectivityManager中的TYPE_BLUETOOTH、TYPE_MOBILE、TYPE_WIFI等字段。当前没有网络连接时返回NetworkUtils.NETWORK_TYPE_NO_CONNECTION
 */
public static int getCurrentNetworkType(Context context) {
    NetworkInfo networkInfo
        = ((ConnectivityManager) context.getSystemService(
        Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
    return networkInfo != null
        ? networkInfo.getType()
        : NETWORK_TYPE_NO_CONNECTION;
}


/**
 * 获取当前网络的具体类型
 *
 * @param context 上下文
 * @return 当前网络的具体类型。具体类型可参照TelephonyManager中的NETWORK_TYPE_1xRTT、NETWORK_TYPE_CDMA等字段。当前没有网络连接时返回NetworkUtils.NETWORK_TYPE_NO_CONNECTION
 */
public static int getCurrentNetworkSubtype(Context context) {
    NetworkInfo networkInfo
        = ((ConnectivityManager) context.getSystemService(
        Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
    return networkInfo != null
        ? networkInfo.getSubtype()
        : NETWORK_TYPE_NO_CONNECTION;
}


/**
 * 判断当前网络是否已经连接
 *
 * @param context 上下文
 * @return 当前网络是否已经连接。false:尚未连接
 */
public static boolean isConnectedByState(Context context) {
    return getCurrentNetworkState(context) == NetworkInfo.State.CONNECTED;
}


/**
 * 判断当前网络是否正在连接
 *
 * @param context 上下文
 * @return 当前网络是否正在连接
 */
public static boolean isConnectingByState(Context context) {
    return getCurrentNetworkState(context) == NetworkInfo.State.CONNECTING;
}


/**
 * 判断当前网络是否已经断开
 *
 * @param context 上下文
 * @return 当前网络是否已经断开
 */
public static boolean isDisconnectedByState(Context context) {
    return getCurrentNetworkState(context) ==
        NetworkInfo.State.DISCONNECTED;
}


/**
 * 判断当前网络是否正在断开
 *
 * @param context 上下文
 * @return 当前网络是否正在断开
 */
public static boolean isDisconnectingByState(Context context) {
    return getCurrentNetworkState(context) ==
        NetworkInfo.State.DISCONNECTING;
}


/**
 * 判断当前网络是否已经暂停
 *
 * @param context 上下文
 * @return 当前网络是否已经暂停
 */
public static boolean isSuspendedByState(Context context) {
    return getCurrentNetworkState(context) == NetworkInfo.State.SUSPENDED;
}


/**
 * 判断当前网络是否处于未知状态中
 *
 * @param context 上下文
 * @return 当前网络是否处于未知状态中
 */
public static boolean isUnknownByState(Context context) {
    return getCurrentNetworkState(context) == NetworkInfo.State.UNKNOWN;
}


/**
 * 判断当前网络的类型是否是蓝牙
 *
 * @param context 上下文
 * @return 当前网络的类型是否是蓝牙。false:当前没有网络连接或者网络类型不是蓝牙
 */
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
public static boolean isBluetoothByType(Context context) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) {
        return false;
    }
    else {
        return getCurrentNetworkType(context) ==
            ConnectivityManager.TYPE_BLUETOOTH;
    }
}


/**
 * 判断当前网络的类型是否是虚拟网络
 *
 * @param context 上下文
 * @return 当前网络的类型是否是虚拟网络。false:当前没有网络连接或者网络类型不是虚拟网络
 */
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public static boolean isDummyByType(Context context) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) {
        return false;
    }
    else {
        return getCurrentNetworkType(context) ==
            ConnectivityManager.TYPE_DUMMY;
    }
}


/**
 * 判断当前网络的类型是否是ETHERNET
 *
 * @param context 上下文
 * @return 当前网络的类型是否是ETHERNET。false:当前没有网络连接或者网络类型不是ETHERNET
 */
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
public static boolean isEthernetByType(Context context) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) {
        return false;
    }
    else {
        return getCurrentNetworkType(context) ==
            ConnectivityManager.TYPE_ETHERNET;
    }
}


/**
 * 判断当前网络的类型是否是移动网络
 *
 * @param context 上下文
 * @return 当前网络的类型是否是移动网络。false:当前没有网络连接或者网络类型不是移动网络
 */
public static boolean isMobileByType(Context context) {
    return getCurrentNetworkType(context) ==
        ConnectivityManager.TYPE_MOBILE;
}


/**
 * 判断当前网络的类型是否是MobileDun
 *
 * @param context 上下文
 * @return 当前网络的类型是否是MobileDun。false:当前没有网络连接或者网络类型不是MobileDun
 */
public static boolean isMobileDunByType(Context context) {
    return getCurrentNetworkType(context) ==
        ConnectivityManager.TYPE_MOBILE_DUN;
}


/**
 * 判断当前网络的类型是否是MobileHipri
 *
 * @param context 上下文
 * @return 当前网络的类型是否是MobileHipri。false:当前没有网络连接或者网络类型不是MobileHipri
 */
public static boolean isMobileHipriByType(Context context) {
    return getCurrentNetworkType(context) ==
        ConnectivityManager.TYPE_MOBILE_HIPRI;
}


/**
 * 判断当前网络的类型是否是MobileMms
 *
 * @param context 上下文
 * @return 当前网络的类型是否是MobileMms。false:当前没有网络连接或者网络类型不是MobileMms
 */
public static boolean isMobileMmsByType(Context context) {
    return getCurrentNetworkType(context) ==
        ConnectivityManager.TYPE_MOBILE_MMS;
}


/**
 * 判断当前网络的类型是否是MobileSupl
 *
 * @param context 上下文
 * @return 当前网络的类型是否是MobileSupl。false:当前没有网络连接或者网络类型不是MobileSupl
 */
public static boolean isMobileSuplByType(Context context) {
    return getCurrentNetworkType(context) ==
        ConnectivityManager.TYPE_MOBILE_SUPL;
}


/**
 * 判断当前网络的类型是否是Wifi
 *
 * @param context 上下文
 * @return 当前网络的类型是否是Wifi。false:当前没有网络连接或者网络类型不是wifi
 */
public static boolean isWifiByType(Context context) {
    return getCurrentNetworkType(context) == ConnectivityManager.TYPE_WIFI;
}


/**
 * 判断当前网络的类型是否是Wimax
 *
 * @param context 上下文
 * @return 当前网络的类型是否是Wimax。false:当前没有网络连接或者网络类型不是Wimax
 */
public static boolean isWimaxByType(Context context) {
    return getCurrentNetworkType(context) == ConnectivityManager.TYPE_WIMAX;
}


/**
 * 判断当前网络的具体类型是否是1XRTT
 *
 * @param context 上下文
 * @return false:当前网络的具体类型是否是1XRTT。false:当前没有网络连接或者具体类型不是1XRTT
 */
public static boolean is1XRTTBySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_1xRTT;
}


/**
 * 判断当前网络的具体类型是否是CDMA(Either IS95A or IS95B)
 *
 * @param context 上下文
 * @return false:当前网络的具体类型是否是CDMA。false:当前没有网络连接或者具体类型不是CDMA
 */
public static boolean isCDMABySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_CDMA;
}


/**
 * 判断当前网络的具体类型是否是EDGE
 *
 * @param context 上下文
 * @return false:当前网络的具体类型是否是EDGE。false:当前没有网络连接或者具体类型不是EDGE
 */
public static boolean isEDGEBySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_EDGE;
}


/**
 * 判断当前网络的具体类型是否是EHRPD
 *
 * @param context 上下文
 * @return false:当前网络的具体类型是否是EHRPD。false:当前没有网络连接或者具体类型不是EHRPD
 */
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static boolean isEHRPDBySubtype(Context context) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
        return false;
    }
    else {
        return getCurrentNetworkSubtype(context) ==
            TelephonyManager.NETWORK_TYPE_EHRPD;
    }
}


/**
 * 判断当前网络的具体类型是否是EVDO_0
 *
 * @param context 上下文
 * @return false:当前网络的具体类型是否是EVDO_0。false:当前没有网络连接或者具体类型不是EVDO_0
 */
public static boolean isEVDO_0BySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_EVDO_0;
}


/**
 * 判断当前网络的具体类型是否是EVDO_A
 *
 * @param context 上下文
 * @return false:当前网络的具体类型是否是EVDO_A。false:当前没有网络连接或者具体类型不是EVDO_A
 */
public static boolean isEVDO_ABySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_EVDO_A;
}


/**
 * 判断当前网络的具体类型是否是EDGE
 *
 * @param context 上下文
 * @return false:当前网络的具体类型是否是EVDO_B。false:当前没有网络连接或者具体类型不是EVDO_B
 */
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
public static boolean isEVDO_BBySubtype(Context context) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.GINGERBREAD) {
        return false;
    }
    else {
        return getCurrentNetworkSubtype(context) ==
            TelephonyManager.NETWORK_TYPE_EVDO_B;
    }
}


/**
 * 判断当前网络的具体类型是否是GPRS
 * EVDO_Bam context 上下文
 *
 * @return false:当前网络的具体类型是否是GPRS。false:当前没有网络连接或者具体类型不是GPRS
 */
public static boolean isGPRSBySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_GPRS;
}


/**
 * 判断当前网络的具体类型是否是HSDPA
 *
 * @param context 上下文
 * @return false:当前网络的具体类型是否是HSDPA。false:当前没有网络连接或者具体类型不是HSDPA
 */
public static boolean isHSDPABySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_HSDPA;
}


/**
 * 判断当前网络的具体类型是否是HSPA
 *
 * @param context 上下文
 * @return false:当前网络的具体类型是否是HSPA。false:当前没有网络连接或者具体类型不是HSPA
 */
public static boolean isHSPABySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_HSPA;
}


/**
 * 判断当前网络的具体类型是否是HSPAP
 *
 * @param context 上下文
 * @return false:当前网络的具体类型是否是HSPAP。false:当前没有网络连接或者具体类型不是HSPAP
 */
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
public static boolean isHSPAPBySubtype(Context context) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) {
        return false;
    }
    else {
        return getCurrentNetworkSubtype(context) ==
            TelephonyManager.NETWORK_TYPE_HSPAP;
    }
}


/**
 * 判断当前网络的具体类型是否是HSUPA
 *
 * @param context 上下文
 * @return false:当前网络的具体类型是否是HSUPA。false:当前没有网络连接或者具体类型不是HSUPA
 */
public static boolean isHSUPABySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_HSUPA;
}


/**
 * 判断当前网络的具体类型是否是IDEN
 *
 * @param context 上下文
 * @return false:当前网络的具体类型是否是IDEN。false:当前没有网络连接或者具体类型不是IDEN
 */
public static boolean isIDENBySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_IDEN;
}


/**
 * 判断当前网络的具体类型是否是LTE
 *
 * @param context 上下文
 * @return false:当前网络的具体类型是否是LTE。false:当前没有网络连接或者具体类型不是LTE
 */
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static boolean isLTEBySubtype(Context context) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
        return false;
    }
    else {
        return getCurrentNetworkSubtype(context) ==
            TelephonyManager.NETWORK_TYPE_LTE;
    }
}


/**
 * 判断当前网络的具体类型是否是UMTS
 *
 * @param context 上下文
 * @return false:当前网络的具体类型是否是UMTS。false:当前没有网络连接或者具体类型不是UMTS
 */
public static boolean isUMTSBySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_UMTS;
}


/**
 * 判断当前网络的具体类型是否是UNKNOWN
 *
 * @param context 上下文
 * @return false:当前网络的具体类型是否是UNKNOWN。false:当前没有网络连接或者具体类型不是UNKNOWN
 */
public static boolean isUNKNOWNBySubtype(Context context) {
    return getCurrentNetworkSubtype(context) ==
        TelephonyManager.NETWORK_TYPE_UNKNOWN;
}


/**
 * 判断当前网络是否是中国移动2G网络
 *
 * @param context 上下文
 * @return false:不是中国移动2G网络或者当前没有网络连接
 */
public static boolean isChinaMobile2G(Context context) {
    return isEDGEBySubtype(context);
}


/**
 * 判断当前网络是否是中国联通2G网络
 *
 * @param context 上下文
 * @return false:不是中国联通2G网络或者当前没有网络连接
 */
public static boolean isChinaUnicom2G(Context context) {
    return isGPRSBySubtype(context);
}


/**
 * 判断当前网络是否是中国联通3G网络
 *
 * @param context 上下文
 * @return false:不是中国联通3G网络或者当前没有网络连接
 */
public static boolean isChinaUnicom3G(Context context) {
    return isHSDPABySubtype(context) || isUMTSBySubtype(context);
}


/**
 * 判断当前网络是否是中国电信2G网络
 *
 * @param context 上下文
 * @return false:不是中国电信2G网络或者当前没有网络连接
 */
public static boolean isChinaTelecom2G(Context context) {
    return isCDMABySubtype(context);
}


/**
 * 判断当前网络是否是中国电信3G网络
 *
 * @param context 上下文
 * @return false:不是中国电信3G网络或者当前没有网络连接
 */
public static boolean isChinaTelecom3G(Context context) {
    return isEVDO_0BySubtype(context) || isEVDO_ABySubtype(context) ||
        isEVDO_BBySubtype(context);
}


/**
 * 获取Wifi的状态,需要ACCESS_WIFI_STATE权限
 *
 * @param context 上下文
 * @return 取值为WifiManager中的WIFI_STATE_ENABLED、WIFI_STATE_ENABLING、WIFI_STATE_DISABLED、WIFI_STATE_DISABLING、WIFI_STATE_UNKNOWN之一
 * @throws Exception 没有找到wifi设备
 */
public static int getWifiState(Context context) throws Exception {
    WifiManager wifiManager = ((WifiManager) context.getSystemService(
        Context.WIFI_SERVICE));
    if (wifiManager != null) {
        return wifiManager.getWifiState();
    }
    else {
        throw new Exception("wifi device not found!");
    }
}

/**
 * 判断Wifi是否打开,需要ACCESS_WIFI_STATE权限
 *
 * @param context 上下文
 * @return true:打开;false:关闭
 */
public static boolean isWifiOpen(Context context) throws Exception {
    int wifiState = getWifiState(context);
    return wifiState == WifiManager.WIFI_STATE_ENABLED ||
        wifiState == WifiManager.WIFI_STATE_ENABLING
        ? true
        : false;
}


/**
 * 设置Wifi,需要CHANGE_WIFI_STATE权限
 *
 * @param context 上下文
 * @param enable wifi状态
 * @return 设置是否成功
 */
public static boolean setWifi(Context context, boolean enable)
    throws Exception {
    //如果当前wifi的状态和要设置的状态不一样
    if (isWifiOpen(context) != enable) {
        ((WifiManager) context.getSystemService(
            Context.WIFI_SERVICE)).setWifiEnabled(enable);
    }
    return true;
}

/**
 * 判断移动网络是否打开,需要ACCESS_NETWORK_STATE权限
 *
 * @param context 上下文
 * @return true:打开;false:关闭
 */
public static boolean isMobileNetworkOpen(Context context) {
    return (((ConnectivityManager) context.getSystemService(
        Context.CONNECTIVITY_SERVICE)).getNetworkInfo(
        ConnectivityManager.TYPE_MOBILE)).isConnected();
}

/**
 * 获取本机IP地址
 *
 * @return null:没有网络连接
 */
public static String getIpAddress() {
    try {
        NetworkInterface nerworkInterface;
        InetAddress inetAddress;
        for (Enumeration<NetworkInterface> en
             = NetworkInterface.getNetworkInterfaces();
             en.hasMoreElements(); ) {
            nerworkInterface = en.nextElement();
            for (Enumeration<InetAddress> enumIpAddr
                 = nerworkInterface.getInetAddresses();
                 enumIpAddr.hasMoreElements(); ) {
                inetAddress = enumIpAddr.nextElement();
                if (!inetAddress.isLoopbackAddress()) {
                    return inetAddress.getHostAddress().toString();
                }
            }
        }
        return null;
    } catch (SocketException ex) {
        ex.printStackTrace();
        return null;
    }
}

/**
 * 设置数据流量状态
 * @param context
 * @param enabled
 */
public static void setDataEnabled(Context context, boolean enabled) {
    ConnectivityManager conMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    Class<?> conMgrClass = null;
    Field iConMgrField = null;
    Object iConMgr = null;
    Class<?> iConMgrClass = null;
    Method setMobileDataEnabledMethod = null;
    try {
        conMgrClass = Class.forName(conMgr.getClass().getName());
        iConMgrField = conMgrClass.getDeclaredField("mService");
        iConMgrField.setAccessible(true);
        iConMgr = iConMgrField.get(conMgr);
        iConMgrClass = Class.forName(iConMgr.getClass().getName());
        setMobileDataEnabledMethod = iConMgrClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
        setMobileDataEnabledMethod.setAccessible(true);
        setMobileDataEnabledMethod.invoke(iConMgr, enabled);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * 获取wifi列表
 * @param context
 * @return
 */
public static List<ScanResult> getWifiScanResults(Context context) {
    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    return wifiManager.startScan() ? wifiManager.getScanResults() : null;
}

/**
 * 过滤扫描结果
 * @param context
 * @param bssid
 * @return
 */
public static ScanResult getScanResultsByBSSID(Context context, String bssid) {
    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    ScanResult scanResult = null;
    boolean f = wifiManager.startScan();
    if (!f) {
        getScanResultsByBSSID(context, bssid);
    }
    List<ScanResult> list = wifiManager.getScanResults();
    if (list != null) {
        for (int i = 0; i < list.size(); i++) {
            scanResult = list.get(i);
            if (scanResult.BSSID.equals(bssid)) {
                break;
            }
        }
    }
    return scanResult;
}

/**
 * 获取wifi连接信息
 * @param context
 * @return
 */
public static WifiInfo getWifiConnectionInfo(Context context) {
    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    return wifiManager.getConnectionInfo();
}

/**
 * 获得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;
}

}

终点站

好了,终点站到了,如果对本次旅途满意的话,请给五星好评哦,没关注的小伙伴轻轻点个上方的关注,毕竟老司机牺牲了很多时间才换来这么一份工具类,如果该工具类依赖其他工具类,都可以在我的史上最全的常用开发工具类收集(持续更新中)中找到。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,810评论 25 707
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,598评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • 软件工程流程以及工具整理 产品设计 文档管理 禅道 设计评审 禅道 开发设计 设计文档 禅道 设计评审 软件开发 ...
    zy17阅读 573评论 0 1
  • 郭相麟 我心中的花朵绽放了 是那么的娇嫩 是那么的动人 是那么的纯洁 我此刻感觉幸福是如此单纯 没有让我感觉到丝毫...
    郭相麟阅读 189评论 0 0