美文网首页简化开发
Android 常用工具类之 NetWorkUtils

Android 常用工具类之 NetWorkUtils

作者: Kevin_小飞象 | 来源:发表于2021-04-08 09:34 被阅读0次
    04.jpg

    网络状态,此工具类不是网上大家用烂的那一份,是博主亲自编写,亲自测试,代码简洁清晰,可满足日常开发。

    import android.annotation.TargetApi;
    import android.content.Context;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.net.wifi.WifiManager;
    import android.os.Build;
    import android.telephony.TelephonyManager;
    import android.text.TextUtils;
    
    import java.net.InetAddress;
    import java.net.NetworkInterface;
    import java.net.SocketException;
    import java.util.Enumeration;
    
    /**
     * Created on 2021/4/2 13:40
     *
     * @author Gong Youqiang
     */
    public class NetWorkUtils {
        /**
         * 网络类型 - 无连接
         */
        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";
    
    
        /**
         * Get network type
         *
         * @param context context
         * @return 网络状态
         */
        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;
            }
        }
    }
    

    相关文章

      网友评论

        本文标题:Android 常用工具类之 NetWorkUtils

        本文链接:https://www.haomeiwen.com/subject/bzafkltx.html