Ultra-SDP v1.0.0版本的 MD5 值为:5418115cd4b552c4cd79d6d68815af17

以下内容为反编译后的 NetworkUtils.java 源代码,内容仅作参考


package com.xuexiang.xutil.net;

import android.content.Context;
import android.content.Intent;
import android.location.LocationManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiManager;
import android.telephony.TelephonyManager;
import com.xuexiang.xutil.XUtil;
import com.xuexiang.xutil.common.ShellUtils;
import com.xuexiang.xutil.common.logger.Logger;
import com.xuexiang.xutil.file.CloseUtils;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.InterfaceAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.URL;
import java.net.URLDecoder;
import java.net.UnknownHostException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
public final class NetworkUtils {

    public enum NetState {
        NET_NO,
        NET_2G,
        NET_3G,
        NET_4G,
        NET_5G,
        NET_WIFI,
        NET_ETHERNET,
        NET_UNKNOWN
    }

    private static byte byteOfInt(int i, int i2) {
        return (byte) (i >> (i2 * 8));
    }

    private NetworkUtils() {
        throw new UnsupportedOperationException("u can't instantiate me...");
    }

    public static void openWirelessSettings() {
        XUtil.getContext().startActivity(new Intent("android.settings.WIRELESS_SETTINGS").setFlags(268435456));
    }

    private static NetworkInfo getActiveNetworkInfo() {
        ConnectivityManager connectivityManager = getConnectivityManager();
        if (connectivityManager == null) {
            return null;
        }
        return connectivityManager.getActiveNetworkInfo();
    }

    public static boolean isNetworkAvailable() {
        NetworkInfo[] allNetworkInfo;
        ConnectivityManager connectivityManager = getConnectivityManager();
        if (connectivityManager == null || (allNetworkInfo = connectivityManager.getAllNetworkInfo()) == null) {
            return false;
        }
        for (NetworkInfo networkInfo : allNetworkInfo) {
            if (networkInfo.getState() == NetworkInfo.State.CONNECTED) {
                return true;
            }
        }
        return false;
    }

    public static boolean isHaveInternet() {
        NetworkInfo activeNetworkInfo;
        try {
            ConnectivityManager connectivityManager = getConnectivityManager();
            if (connectivityManager == null || (activeNetworkInfo = connectivityManager.getActiveNetworkInfo()) == null || !activeNetworkInfo.isConnected()) {
                return false;
            }
            return activeNetworkInfo.getState() == NetworkInfo.State.CONNECTED;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    public static boolean isGpsEnabled() {
        return ((LocationManager) XUtil.getContext().getSystemService("location")).isProviderEnabled("gps");
    }

    public static boolean isMobile() {
        NetworkInfo activeNetworkInfo = getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isAvailable() && activeNetworkInfo.getType() == 0;
    }

    public static boolean isWifi() {
        NetworkInfo activeNetworkInfo = getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isAvailable() && activeNetworkInfo.getType() == 1;
    }

    public static boolean is3G() {
        NetworkInfo activeNetworkInfo = getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isAvailable() && activeNetworkInfo.getType() == 0;
    }

    public static boolean is4G() {
        NetworkInfo activeNetworkInfo = getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting() && activeNetworkInfo.getType() == 13;
    }

    public static boolean isWifiEnabled() {
        WifiManager wifiManager = getWifiManager();
        return wifiManager != null && wifiManager.isWifiEnabled();
    }

    public static void setWifiEnabled(boolean z) {
        WifiManager wifiManager = getWifiManager();
        if (wifiManager == null) {
            return;
        }
        if (z) {
            if (wifiManager.isWifiEnabled()) {
                return;
            }
            wifiManager.setWifiEnabled(true);
        } else if (wifiManager.isWifiEnabled()) {
            wifiManager.setWifiEnabled(false);
        }
    }

    public static boolean isAvailableByPing() {
        return isAvailableByPing(null);
    }

    public static boolean isAvailableByPing(String str) {
        ShellUtils.CommandResult execCommand = ShellUtils.execCommand(String.format("ping -c 1 %s", (str == null || str.length() <= 0) ? "223.5.5.5" : "223.5.5.5"), false);
        boolean z = execCommand.result == 0;
        if (execCommand.errorMsg != null) {
            Logger.dTag("NetworkUtils", "isAvailableByPing() called" + execCommand.errorMsg);
        }
        if (execCommand.successMsg != null) {
            Logger.dTag("NetworkUtils", "isAvailableByPing() called" + execCommand.successMsg);
        }
        return z;
    }

    public static boolean getMobileDataEnabled() {
        Method declaredMethod;
        try {
            TelephonyManager telephonyManager = (TelephonyManager) XUtil.getContext().getSystemService("phone");
            if (telephonyManager != null && (declaredMethod = telephonyManager.getClass().getDeclaredMethod("getDataEnabled", new Class[0])) != null) {
                return ((Boolean) declaredMethod.invoke(telephonyManager, new Object[0])).booleanValue();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    public static WifiManager getWifiManager() {
        return (WifiManager) XUtil.getContext().getApplicationContext().getSystemService("wifi");
    }

    public static ConnectivityManager getConnectivityManager() {
        return (ConnectivityManager) XUtil.getContext().getSystemService("connectivity");
    }

    public static InetAddress getLocalInetAddress() {
        WifiManager wifiManager = getWifiManager();
        if (wifiManager != null && isWifi()) {
            return getWifiInetAddress(wifiManager);
        }
        return getInetAddressByEnumerate();
    }

    private static InetAddress getInetAddressByEnumerate() {
        Enumeration<NetworkInterface> enumeration;
        try {
            enumeration = NetworkInterface.getNetworkInterfaces();
        } catch (SocketException e) {
            e.printStackTrace();
            enumeration = null;
        }
    }

    private static InetAddress getWifiInetAddress(WifiManager wifiManager) {
        int ipAddress = wifiManager.getConnectionInfo().getIpAddress();
        if (ipAddress == 0) {
            return null;
        }
        return intToInet(ipAddress);
    }

    private static InetAddress intToInet(int i) {
        byte[] bArr = new byte[4];
        for (int i2 = 0; i2 < 4; i2++) {
            bArr[i2] = byteOfInt(i, i2);
        }
        try {
            return InetAddress.getByAddress(bArr);
        } catch (UnknownHostException e) {
            e.printStackTrace();
            return null;
        }
    }

    public static int ipToInt(String str) {
        String[] split = str.split("\\.");
        int i = 0;
        for (int i2 = 0; i2 < split.length; i2++) {
            double d = i;
            double parseInt = Integer.parseInt(split[i2]) % 256;
            double pow = Math.pow(256.0d, 3 - i2);
            Double.isNaN(parseInt);
            Double.isNaN(d);
            i = (int) (d + (parseInt * pow));
        }
        return i;
    }

    public static String ipToString(int i) {
        if (i == 0) {
            return null;
        }
        return ipToString(i, ".");
    }

    private static String ipToString(int i, String str) {
        if (i > 0) {
            StringBuffer stringBuffer = new StringBuffer();
            stringBuffer.append((int) byteOfInt(i, 0));
            stringBuffer.append(str);
            stringBuffer.append((int) byteOfInt(i, 1));
            stringBuffer.append(str);
            stringBuffer.append((int) byteOfInt(i, 2));
            stringBuffer.append(str);
            stringBuffer.append((int) byteOfInt(i, 3));
            return stringBuffer.toString();
        }
        return null;
    }

    public static String getIPAddress(boolean z) {
        try {
            Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
            LinkedList linkedList = new LinkedList();
            while (networkInterfaces.hasMoreElements()) {
                NetworkInterface nextElement = networkInterfaces.nextElement();
                if (nextElement.isUp() && !nextElement.isLoopback()) {
                    Enumeration<InetAddress> inetAddresses = nextElement.getInetAddresses();
                    while (inetAddresses.hasMoreElements()) {
                        linkedList.addFirst(inetAddresses.nextElement());
                    }
                }
            }
            Iterator it = linkedList.iterator();
            while (it.hasNext()) {
                InetAddress inetAddress = (InetAddress) it.next();
                if (!inetAddress.isLoopbackAddress()) {
                    String hostAddress = inetAddress.getHostAddress();
                    boolean z2 = hostAddress.indexOf(58) < 0;
                    if (z) {
                        if (z2) {
                            return hostAddress;
                        }
                    } else if (!z2) {
                        int indexOf = hostAddress.indexOf(37);
                        if (indexOf < 0) {
                            return hostAddress.toUpperCase();
                        }
                        return hostAddress.substring(0, indexOf).toUpperCase();
                    }
                }
            }
            return "";
        } catch (SocketException e) {
            e.printStackTrace();
            return "";
        }
    }

    public static String getBroadcastIpAddress() {
        try {
            Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
            new LinkedList();
            while (networkInterfaces.hasMoreElements()) {
                NetworkInterface nextElement = networkInterfaces.nextElement();
                if (nextElement.isUp() && !nextElement.isLoopback()) {
                    List<InterfaceAddress> interfaceAddresses = nextElement.getInterfaceAddresses();
                    for (int i = 0; i < interfaceAddresses.size(); i++) {
                        InetAddress broadcast = interfaceAddresses.get(i).getBroadcast();
                        if (broadcast != null) {
                            return broadcast.getHostAddress();
                        }
                    }
                    continue;
                }
            }
            return "";
        } catch (SocketException e) {
            e.printStackTrace();
            return "";
        }
    }

    public static String getDomainAddress(String str) {
        try {
            return InetAddress.getByName(str).getHostAddress();
        } catch (UnknownHostException e) {
            e.printStackTrace();
            return "";
        }
    }

    public static NetState getNetStateType() {
        if (isEthernet()) {
            return NetState.NET_ETHERNET;
        }
        NetworkInfo activeNetworkInfo = getActiveNetworkInfo();
        if (activeNetworkInfo != null && activeNetworkInfo.isAvailable()) {
            if (activeNetworkInfo.getType() == 1) {
                return NetState.NET_WIFI;
            }
            if (activeNetworkInfo.getType() == 0) {
                switch (activeNetworkInfo.getSubtype()) {
                    case 1:
                    case 2:
                    case 4:
                    case 7:
                    case 11:
                    case 16:
                        return NetState.NET_2G;
                    case 3:
                    case 5:
                    case 6:
                    case 8:
                    case 9:
                    case 10:
                    case 12:
                    case 14:
                    case 15:
                    case 17:
                        return NetState.NET_3G;
                    case 13:
                    case 18:
                        return NetState.NET_4G;
                    case 19:
                    default:
                        String subtypeName = activeNetworkInfo.getSubtypeName();
                        if (subtypeName.equalsIgnoreCase("TD-SCDMA") || subtypeName.equalsIgnoreCase("WCDMA") || subtypeName.equalsIgnoreCase("CDMA2000")) {
                            return NetState.NET_3G;
                        }
                        return NetState.NET_UNKNOWN;
                    case 20:
                        return NetState.NET_5G;
                }
            }
            return NetState.NET_UNKNOWN;
        }
        return NetState.NET_NO;
    }

    private static boolean isEthernet() {
        NetworkInfo networkInfo;
        NetworkInfo.State state;
        ConnectivityManager connectivityManager = getConnectivityManager();
        if (connectivityManager == null || (networkInfo = connectivityManager.getNetworkInfo(9)) == null || (state = networkInfo.getState()) == null) {
            return false;
        }
        return state == NetworkInfo.State.CONNECTED || state == NetworkInfo.State.CONNECTING;
    }

    public static String getNetworkOperatorName(Context context) {
        String simOperator = ((TelephonyManager) context.getSystemService("phone")).getSimOperator();
        if (simOperator != null) {
            char c = 65535;
            int hashCode = simOperator.hashCode();
            if (hashCode != 49679502) {
                switch (hashCode) {
                    case 49679470:
                        if (simOperator.equals("46000")) {
                            c = 0;
                            break;
                        }
                        break;
                    case 49679471:
                        if (simOperator.equals("46001")) {
                            c = 3;
                            break;
                        }
                        break;
                    case 49679472:
                        if (simOperator.equals("46002")) {
                            c = 1;
                            break;
                        }
                        break;
                    case 49679473:
                        if (simOperator.equals("46003")) {
                            c = 5;
                            break;
                        }
                        break;
                    default:
                        switch (hashCode) {
                            case 49679475:
                                if (simOperator.equals("46005")) {
                                    c = 6;
                                    break;
                                }
                                break;
                            case 49679476:
                                if (simOperator.equals("46006")) {
                                    c = 4;
                                    break;
                                }
                                break;
                            case 49679477:
                                if (simOperator.equals("46007")) {
                                    c = 2;
                                    break;
                                }
                                break;
                        }
                }
            } else if (simOperator.equals("46011")) {
                c = 7;
            }
            switch (c) {
                case 0:
                case 1:
                case 2:
                    return "中国移动";
                case 3:
                case 4:
                    return "中国联通";
                case 5:
                case 6:
                case 7:
                    return "中国电信";
            }
        }
        return "未知";
    }

    public static String getNetworkOperatorName() {
        TelephonyManager telephonyManager = (TelephonyManager) XUtil.getContext().getSystemService("phone");
        if (telephonyManager != null) {
            return telephonyManager.getNetworkOperatorName();
        }
        return null;
    }

    public static Map<String, String> getUrlParams(String str) {
        HashMap hashMap = null;
        try {
            String[] split = str.split("\\?");
            if (split.length > 1) {
                HashMap hashMap2 = new HashMap();
                try {
                    for (String str2 : split[1].split("&")) {
                        String[] split2 = str2.split("=");
                        hashMap2.put(URLDecoder.decode(split2[0], "UTF-8"), split2.length > 1 ? URLDecoder.decode(split2[1], "UTF-8") : "");
                    }
                    return hashMap2;
                } catch (UnsupportedEncodingException e) {
                    e = e;
                    hashMap = hashMap2;
                    e.printStackTrace();
                    return hashMap;
                }
            }
            return null;
        } catch (UnsupportedEncodingException e2) {
            e = e2;
        }
    }

    public static String parseUrl(String str) {
        return ("".equals(str) || !str.contains("?")) ? str : str.substring(0, str.indexOf(63));
    }

    public static boolean isUrlValid(String str) {
        return str.matches("^(http|https|ftp)\\://(((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])|([a-zA-Z0-9_\\-\\.])+\\.(com|cn|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum|uk|me))((:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\\-\\._\\?\\,\\'/\\\\\\+&%\\$#\\=~])*)$");
    }

    public static boolean isIP(String str) {
        return Pattern.compile("\\b((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\b").matcher(str).matches();
    }

    public static void downLoadFileByUrl(String str, String str2, String str3) throws IOException {
        HttpURLConnection httpURLConnection = (HttpURLConnection) new URL(str).openConnection();
        httpURLConnection.setConnectTimeout(3000);
        httpURLConnection.setRequestProperty("Content-Type", "text/plain; charset=utf-8");
        InputStream inputStream = httpURLConnection.getInputStream();
        byte[] readInputStream = readInputStream(inputStream);
        File file = new File(str3);
        if (!file.exists()) {
            file.mkdirs();
        }
        FileOutputStream fileOutputStream = new FileOutputStream(new File(file + File.separator + str2));
        fileOutputStream.write(readInputStream);
        CloseUtils.closeIO(fileOutputStream, inputStream);
    }

    private static byte[] readInputStream(InputStream inputStream) throws IOException {
        byte[] bArr = new byte[8192];
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        while (true) {
            int read = inputStream.read(bArr);
            if (read != -1) {
                byteArrayOutputStream.write(bArr, 0, read);
            } else {
                byteArrayOutputStream.close();
                return byteArrayOutputStream.toByteArray();
            }
        }
    }
}