Android NetworkUtil

Android NetworkUtil

NetworkUtil网络工具类,判断是否有网络、是否是wifi、是否是4G网络等,详细内容看注释

/******************************************
 * @version: V1.0
 * @author: 己师
 ******************************************/

public class NetworkUtil {
    /**
     * 是否去需要去校验当前网络是否可用true为是,false为否
     */
    private static boolean bCheckedNetInfo = true;

    /**
     * 获取当前设备的Mac地址。如果获取失败,返回空字符串。
     *
     * @return
     */
    public static String getMacAddr(Context context) {
        try {
            WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            WifiInfo info = wifi.getConnectionInfo();
            return info.getMacAddress();
        } catch (Throwable e) {
            return "";
        }
    }

    /**
     * 检测当前网络是否为WAP上网方式
     *
     * @param context
     * @return true为是,false为否
     */
    public static boolean isWAPStatic(Context context) {
        ConnectivityManager connectManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        try {
            NetworkInfo info = connectManager.getActiveNetworkInfo();
            if (info == null || !info.isConnected()) {
                return false;
            }
            if (info.getExtraInfo().contains("wap") || info.getExtraInfo().contains("WAP")) {
                return true;
            }
        } catch (Throwable e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * Returns whether the network is available
     */
    public static boolean isNetworkAvailable(Context context) {
        try {
            ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            if (connectivity == null) {
            } else {
                NetworkInfo infos = connectivity.getActiveNetworkInfo();
                if (infos != null && infos.isConnected()) {
                    return true;
                }
            }
        } catch (Throwable e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * Returns whether the network is available
     */
    public static boolean isNetworkAvailableWidthDefaultToast(Context context) {
        try {
            ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            if (connectivity == null) {
            } else {
                NetworkInfo infos = connectivity.getActiveNetworkInfo();
                if (infos != null && infos.isConnected()) {
                    return true;
                }
            }
        } catch (Throwable e) {
            e.printStackTrace();
        }
        ToastUtil.showOnly(context, R.string.no_net_work_str);
        return false;
    }

    /**
     * 检测当前网络是否连接(针对点击某个控件跳转下一界面需要联网请求数据,或在当前界面需要发起联网请求的时候使用)
     *
     * @param context
     * @param bNoNetToast 是否需要弹出默认Toast true为是,false为否
     * @return
     */
    public static boolean checkNetworkAvailableOnClick(Context context, boolean bNoNetToast) {
        if (!bCheckedNetInfo) {
            return true;
        }
        return isNetworkAvailable(context, bNoNetToast);
    }

    /**
     * 检测当前网络是否连接
     *
     * @param context
     * @param bNoNetToast 是否需要弹出默认Toast true为是,false为否
     * @return
     */
    public static boolean isNetworkAvailable(Context context, boolean bNoNetToast) {
        boolean netFlag = false;
        try {
            ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            if (connectivity == null) {
            } else {
                NetworkInfo infos = connectivity.getActiveNetworkInfo();
                if (infos != null && infos.isConnected()) {
                    netFlag = true;
                }
            }
        } catch (Throwable e) {
            e.printStackTrace();
        }
        if (!netFlag && bNoNetToast) {
            ToastUtil.showError(context, R.string.no_net_work_str);
        }
        return netFlag;
    }

    /**
     * 判断当前是否为漫游连接
     */
    public static boolean isNetworkRoaming(Context context) {
        try {
            ConnectivityManager connectivity = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            if (connectivity == null) {
            } else {
                NetworkInfo info = connectivity.getActiveNetworkInfo();
                if (info != null && info.getType() == ConnectivityManager.TYPE_MOBILE) {
                    TelephonyManager telManager = (TelephonyManager) context
                            .getSystemService(Context.TELEPHONY_SERVICE);
                    if (telManager != null && telManager.isNetworkRoaming()) {
                        return true;
                    } else {
                    }
                } else {
                }
            }
        } catch (Throwable e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * wifi连接
     *
     * @param context
     * @return 如果是wifi 并且 也处于连接状态中则返回真
     */
    public static boolean isWifiNetworkAvailable(Context context) {
        try {
            ConnectivityManager connectManager = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo info = connectManager.getActiveNetworkInfo();
            if (info == null || !info.isConnected()) {
                return false;
            }
            if (info.getType() == ConnectivityManager.TYPE_WIFI) {
                return true;
            }
        } catch (Throwable e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 3G网
     * 3G 类型繁多,如果非2G, 4G ,则归为3G
     *
     * @param context
     * @return 如果是手机上网并且 也处于连接状态中则返回真
     */
    public static boolean isNGNetworkAvailable(Context context) {
        try {
            NetworkInfo info = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE))
                    .getActiveNetworkInfo();
//            String _strSubTypeName = info.getSubtypeName();
            if (info == null || !info.isConnected()) {
                return false;
            }
//            KL.d(NetworkUtil.class, "_strSubTypeName = {}", _strSubTypeName);
//            //运营商 3G
//            if (!TextUtils.isEmpty(_strSubTypeName)) {
//                if (_strSubTypeName.equalsIgnoreCase("TD-SCDMA") || _strSubTypeName.equalsIgnoreCase("WCDMA") || _strSubTypeName.equalsIgnoreCase("CDMA2000")) {
//                    return true;
//                }
//            }
            int currentNetworkType = info.getType();
            if (currentNetworkType == ConnectivityManager.TYPE_MOBILE) {
                return true;
            }
        } catch (Throwable e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 判断当前网络是否已经连接,并且是2G状态.
     *
     * @param context
     * @return true, or false
     */
    public static boolean is2GMobileNetwork(Context context) {
        ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo info;
        try {
            info = manager.getActiveNetworkInfo();
            if (info != null && info.getType() == ConnectivityManager.TYPE_MOBILE) {
                int currentNetworkType = info.getSubtype();
                if (currentNetworkType == TelephonyManager.NETWORK_TYPE_GPRS
                        || currentNetworkType == TelephonyManager.NETWORK_TYPE_CDMA
                        || currentNetworkType == TelephonyManager.NETWORK_TYPE_EDGE
                        || currentNetworkType == TelephonyManager.NETWORK_TYPE_1xRTT
                        || currentNetworkType == TelephonyManager.NETWORK_TYPE_IDEN) {
                    return true;
                }
            }
        } catch (Throwable e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 判断当前网络是否已经连接,并且是4G状态. 根据产品的定义,4G为LTE;
     *
     * @param context
     * @return true, or false
     */
    public static boolean is4GMobileNetwork(Context context) {
        ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo info;
        try {
            info = manager.getActiveNetworkInfo();
            if (info != null && info.getType() == ConnectivityManager.TYPE_MOBILE) {
                int currentNetworkType = info.getSubtype();
                if (currentNetworkType == TelephonyManager.NETWORK_TYPE_LTE) {
                    return true;
                }
            }
        } catch (Throwable e) {
            e.printStackTrace();
        }
        return false;
    }

    public static State getState(Context context) {
        NetworkInfo info = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE))
                .getActiveNetworkInfo();
        if (info == null) {
            return NetworkInfo.State.UNKNOWN;
        }
        return info.getState();
    }

    /**
     * 获取当前可使用的网络类型。
     *
     * @return 结果可能为:wifi 4g 3g 2g nonet none
     */
    public static String getCurrentAvailableNetworkType(Context context) {
        try {
            ConnectivityManager connectivity = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            if (connectivity == null) {
                return "none";
            }
            if (!isNetworkAvailable(context)) {
                return "nonet";
            }
            if (isWifiNetworkAvailable(context)) {
                return "wifi";
            }
            if (is2GMobileNetwork(context)) {
                return "2g";
            }
            if (is4GMobileNetwork(context)) {
                return "4g";
            }
            if (isNGNetworkAvailable(context)) {
                return "3g";
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "nonet";
    }

    public static int getNetworkIndex(Context context) {
        try {
            ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
            if (networkInfo == null) {
                return 0;
            }
            if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
                return 1;
            } else if ((networkInfo.getSubtype() == TelephonyManager.NETWORK_TYPE_EDGE
                    || networkInfo.getSubtype() == TelephonyManager.NETWORK_TYPE_GPRS
                    || networkInfo.getSubtype() == TelephonyManager.NETWORK_TYPE_CDMA)) {
                return 2;
            } else if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
                return 3;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }

    public static boolean canUseProxy(Context context) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo mobNetInfoActivity = connectivityManager.getActiveNetworkInfo();
        if (null == mobNetInfoActivity || mobNetInfoActivity.getType() == ConnectivityManager.TYPE_WIFI) { // 如果设备没有网络则mobNetInfoActivity==null
            return false;
        }

        if (NetworkUtil.isWAPStatic(context)) {
            return false;
        }

        TelephonyManager iPhoneManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        String iNumeric = iPhoneManager.getSimOperator();

        boolean bUnicom = true;
        if (!"46001".equals(iNumeric)) { // 非联通手机号
            bUnicom = false;
        } else {
            // 如果需要区分联通4G网络则可以在此处新增相关逻辑处理
        }
        return bUnicom;
    }

    /**
     * 获取当前的网络状态
     *
     * @param context
     * @return
     */
    public static int getNetwork(Context context) {
        try {
            ConnectivityManager connectivity = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            if (connectivity == null) {
                return -1;//无网络
            }
            if (!isNetworkAvailable(context)) {
                return 0;//无网络
            }
            if (isWifiNetworkAvailable(context)) {
                return 1;//wifi网络
            }
            if (is2GMobileNetwork(context)) {
                return 2;//2G网络
            }
            if (is4GMobileNetwork(context)) {
                return 4;//4G网络
            }
            if (isNGNetworkAvailable(context)) {
                return 3;//3G网络
            }
        } catch (Throwable e) {
            e.printStackTrace();
        }
        return -1;//无网络
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值