zoukankan      html  css  js  c++  java
  • Android NetWorkUtil

    package com.android.hcframe.netdisc.util;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.text.DecimalFormat;
    import java.util.List;
    
    import android.content.ComponentName;
    import android.content.Context;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.net.wifi.WifiInfo;
    import android.net.wifi.WifiManager;
    import android.support.v4.content.ContextCompat;
    import android.telephony.CellInfo;
    import android.telephony.NeighboringCellInfo;
    import android.telephony.TelephonyManager;
    import android.telephony.cdma.CdmaCellLocation;
    import android.telephony.gsm.GsmCellLocation;
    import android.util.Log;
    
    public class NetWorkUtil {
    
        public static boolean isWifiAvailable(Context context) {
            ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
            return (networkInfo != null && networkInfo.isConnected() && networkInfo
                    .getType() == ConnectivityManager.TYPE_WIFI);
        }
    
        /**
         * 获取MAC地址
         *
         * @param context
         * @return
         */
        public static String getMacAddress(Context context) {
            if (context == null) {
                return "";
            }
    
            String localMac = null;
            if (isWifiAvailable(context)) {
                localMac = getWifiMacAddress(context);
            }
    
            if (localMac != null && localMac.length() > 0) {
                localMac = localMac.replace(":", "-").toLowerCase();
                return localMac;
            }
    
            localMac = getMacFromCallCmd();
            if (localMac != null) {
                localMac = localMac.replace(":", "-").toLowerCase();
            }
    
            return localMac;
        }
    
        private static String getWifiMacAddress(Context context) {
            String localMac = null;
            try {
                WifiManager wifi = (WifiManager) context
                        .getSystemService(Context.WIFI_SERVICE);
                WifiInfo info = wifi.getConnectionInfo();
                if (wifi.isWifiEnabled()) {
                    localMac = info.getMacAddress();
                    if (localMac != null) {
                        localMac = localMac.replace(":", "-").toLowerCase();
                        return localMac;
                    }
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return null;
        }
    
        /**
         * 通过callCmd("busybox ifconfig","HWaddr")获取mac地址
         *
         * @attention 需要设备装有busybox工具
         * @return Mac Address
         */
        private static String getMacFromCallCmd() {
            String result = "";
            result = callCmd("busybox ifconfig", "HWaddr");
    
            if (result == null || result.length() <= 0) {
                return null;
            }
    
            Log.v("tag", "cmd result : " + result);
    
            // 对该行数据进行解析
            // 例如:eth0 Link encap:Ethernet HWaddr 00:16:E8:3E:DF:67
            if (result.length() > 0 && result.contains("HWaddr") == true) {
                String Mac = result.substring(result.indexOf("HWaddr") + 6,
                        result.length() - 1);
                if (Mac.length() > 1) {
                    result = Mac.replaceAll(" ", "");
                }
            }
    
            return result;
        }
    
        public static String callCmd(String cmd, String filter) {
            String result = "";
            String line = "";
            try {
                Process proc = Runtime.getRuntime().exec(cmd);
                InputStreamReader is = new InputStreamReader(proc.getInputStream());
                BufferedReader br = new BufferedReader(is);
    
                // 执行命令cmd,只取结果中含有filter的这一行
                while ((line = br.readLine()) != null
                        && line.contains(filter) == false) {
                }
    
                result = line;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return result;
        }
    
        /**
         * 网络是否可用
         *
         * @param context
         * @return
         */
        public static boolean IsNetWorkEnable(Context context) {
            try {
                ConnectivityManager connectivity = (ConnectivityManager) context
                        .getSystemService(Context.CONNECTIVITY_SERVICE);
                if (connectivity == null) {
    //                ToastUtil.showMessage(context, "无法连接网络");
                    return false;
                }
    
                NetworkInfo info = connectivity.getActiveNetworkInfo();
                if (info != null && info.isConnected()) {
                    // 判断当前网络是否已经连接
                    if (info.getState() == NetworkInfo.State.CONNECTED) {
                        return true;
                    }
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    //        ToastUtil.showMessage(context, "无法连接网络");
            return false;
        }
    
        private static final int NETWORK_TYPE_UNAVAILABLE = -1;
        // private static final int NETWORK_TYPE_MOBILE = -100;
        private static final int NETWORK_TYPE_WIFI = -101;
    
        private static final int NETWORK_CLASS_WIFI = -101;
        private static final int NETWORK_CLASS_UNAVAILABLE = -1;
        /** Unknown network class. */
        private static final int NETWORK_CLASS_UNKNOWN = 0;
        /** Class of broadly defined "2G" networks. */
        private static final int NETWORK_CLASS_2_G = 1;
        /** Class of broadly defined "3G" networks. */
        private static final int NETWORK_CLASS_3_G = 2;
        /** Class of broadly defined "4G" networks. */
        private static final int NETWORK_CLASS_4_G = 3;
    
        private static DecimalFormat df = new DecimalFormat("#.##");
    
        // 适配低版本手机
        /** Network type is unknown */
        public static final int NETWORK_TYPE_UNKNOWN = 0;
        /** Current network is GPRS */
        public static final int NETWORK_TYPE_GPRS = 1;
        /** Current network is EDGE */
        public static final int NETWORK_TYPE_EDGE = 2;
        /** Current network is UMTS */
        public static final int NETWORK_TYPE_UMTS = 3;
        /** Current network is CDMA: Either IS95A or IS95B */
        public static final int NETWORK_TYPE_CDMA = 4;
        /** Current network is EVDO revision 0 */
        public static final int NETWORK_TYPE_EVDO_0 = 5;
        /** Current network is EVDO revision A */
        public static final int NETWORK_TYPE_EVDO_A = 6;
        /** Current network is 1xRTT */
        public static final int NETWORK_TYPE_1xRTT = 7;
        /** Current network is HSDPA */
        public static final int NETWORK_TYPE_HSDPA = 8;
        /** Current network is HSUPA */
        public static final int NETWORK_TYPE_HSUPA = 9;
        /** Current network is HSPA */
        public static final int NETWORK_TYPE_HSPA = 10;
        /** Current network is iDen */
        public static final int NETWORK_TYPE_IDEN = 11;
        /** Current network is EVDO revision B */
        public static final int NETWORK_TYPE_EVDO_B = 12;
        /** Current network is LTE */
        public static final int NETWORK_TYPE_LTE = 13;
        /** Current network is eHRPD */
        public static final int NETWORK_TYPE_EHRPD = 14;
        /** Current network is HSPA+ */
        public static final int NETWORK_TYPE_HSPAP = 15;
    
        /**
         * 格式化大小
         *
         * @param size
         * @return
         */
        public static String formatSize(long size) {
            String unit = "B";
            float len = size;
            if (len > 900) {
                len /= 1024f;
                unit = "KB";
            }
            if (len > 900) {
                len /= 1024f;
                unit = "MB";
            }
            if (len > 900) {
                len /= 1024f;
                unit = "GB";
            }
            if (len > 900) {
                len /= 1024f;
                unit = "TB";
            }
            return df.format(len) + unit;
        }
    
        public static String formatSizeBySecond(long size) {
            String unit = "B";
            float len = size;
            if (len > 900) {
                len /= 1024f;
                unit = "KB";
            }
            if (len > 900) {
                len /= 1024f;
                unit = "MB";
            }
            if (len > 900) {
                len /= 1024f;
                unit = "GB";
            }
            if (len > 900) {
                len /= 1024f;
                unit = "TB";
            }
            return df.format(len) + unit + "/s";
        }
    
        public static String format(long size) {
            String unit = "B";
            float len = size;
            if (len > 1000) {
                len /= 1024f;
                unit = "KB";
                if (len > 1000) {
                    len /= 1024f;
                    unit = "MB";
                    if (len > 1000) {
                        len /= 1024f;
                        unit = "GB";
                    }
                }
            }
            return df.format(len) + "
    " + unit + "/s";
        }
    
        /**
         * 获取运营商
         *
         * @return
         */
        public static String getProvider(Context context) {
            String provider = "未知";
            try {
                TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
                String IMSI = telephonyManager.getSubscriberId();
                Log.v("tag", "getProvider.IMSI:" + IMSI);
                if (IMSI == null) {
                    if (TelephonyManager.SIM_STATE_READY == telephonyManager
                            .getSimState()) {
                        String operator = telephonyManager.getSimOperator();
                        Log.v("tag", "getProvider.operator:" + operator);
                        if (operator != null) {
                            if (operator.equals("46000")
                                    || operator.equals("46002")
                                    || operator.equals("46007")) {
                                provider = "中国移动";
                            } else if (operator.equals("46001")) {
                                provider = "中国联通";
                            } else if (operator.equals("46003")) {
                                provider = "中国电信";
                            }
                        }
                    }
                } else {
                    if (IMSI.startsWith("46000") || IMSI.startsWith("46002")
                            || IMSI.startsWith("46007")) {
                        provider = "中国移动";
                    } else if (IMSI.startsWith("46001")) {
                        provider = "中国联通";
                    } else if (IMSI.startsWith("46003")) {
                        provider = "中国电信";
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return provider;
        }
    
        /**
         * 获取网络类型
         *
         * @return
         */
        public static String getCurrentNetworkType(Context context) {
            int networkClass = getNetworkClass(context);
            String type = "未知";
            switch (networkClass) {
                case NETWORK_CLASS_UNAVAILABLE:
                    type = "";
                    break;
                case NETWORK_CLASS_WIFI:
                    type = "Wi-Fi";
                    break;
                case NETWORK_CLASS_2_G:
                    type = "2G";
                    break;
                case NETWORK_CLASS_3_G:
                    type = "3G";
                    break;
                case NETWORK_CLASS_4_G:
                    type = "4G";
                    break;
                case NETWORK_CLASS_UNKNOWN:
                    type = "未知";
                    break;
            }
            return type;
        }
    
        private static int getNetworkClassByType(int networkType) {
            switch (networkType) {
                case NETWORK_TYPE_UNAVAILABLE:
                    return NETWORK_CLASS_UNAVAILABLE;
                case NETWORK_TYPE_WIFI:
                    return NETWORK_CLASS_WIFI;
                case NETWORK_TYPE_GPRS:
                case NETWORK_TYPE_EDGE:
                case NETWORK_TYPE_CDMA:
                case NETWORK_TYPE_1xRTT:
                case NETWORK_TYPE_IDEN:
                    return NETWORK_CLASS_2_G;
                case NETWORK_TYPE_UMTS:
                case NETWORK_TYPE_EVDO_0:
                case NETWORK_TYPE_EVDO_A:
                case NETWORK_TYPE_HSDPA:
                case NETWORK_TYPE_HSUPA:
                case NETWORK_TYPE_HSPA:
                case NETWORK_TYPE_EVDO_B:
                case NETWORK_TYPE_EHRPD:
                case NETWORK_TYPE_HSPAP:
                    return NETWORK_CLASS_3_G;
                case NETWORK_TYPE_LTE:
                    return NETWORK_CLASS_4_G;
                default:
                    return NETWORK_CLASS_UNKNOWN;
            }
        }
    
        private static int getNetworkClass(Context context) {
            int networkType = NETWORK_TYPE_UNKNOWN;
            try {
                final NetworkInfo network = ((ConnectivityManager) context
                        .getSystemService(Context.CONNECTIVITY_SERVICE))
                        .getActiveNetworkInfo();
                if (network != null && network.isAvailable()
                        && network.isConnected()) {
                    int type = network.getType();
                    if (type == ConnectivityManager.TYPE_WIFI) {
                        networkType = NETWORK_TYPE_WIFI;
                    } else if (type == ConnectivityManager.TYPE_MOBILE) {
                        TelephonyManager telephonyManager = (TelephonyManager)  context.getSystemService(
                                Context.TELEPHONY_SERVICE);
                        networkType = telephonyManager.getNetworkType();
                    }
                } else {
                    networkType = NETWORK_TYPE_UNAVAILABLE;
                }
    
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            return getNetworkClassByType(networkType);
    
        }
    
        public static String getWifiRssi(Context context) {
            int asu = 85;
            try {
                final NetworkInfo network = ((ConnectivityManager)  context.getSystemService(Context.CONNECTIVITY_SERVICE))
                        .getActiveNetworkInfo();
                if (network != null && network.isAvailable()
                        && network.isConnected()) {
                    int type = network.getType();
                    if (type == ConnectivityManager.TYPE_WIFI) {
                        WifiManager wifiManager = (WifiManager) context
                                .getSystemService(Context.WIFI_SERVICE);
    
                        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
                        if (wifiInfo != null) {
                            asu = wifiInfo.getRssi();
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return asu + "dBm";
        }
    
        public static String getWifiSsid(Context context) {
            String ssid = "";
            try {
                final NetworkInfo network = ((ConnectivityManager)context
                        .getSystemService(Context.CONNECTIVITY_SERVICE))
                        .getActiveNetworkInfo();
                if (network != null && network.isAvailable()
                        && network.isConnected()) {
                    int type = network.getType();
                    if (type == ConnectivityManager.TYPE_WIFI) {
                        WifiManager wifiManager = (WifiManager)context
                                .getSystemService(Context.WIFI_SERVICE);
    
                        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
                        if (wifiInfo != null) {
                            ssid = wifiInfo.getSSID();
                            if (ssid == null) {
                                ssid = "";
                            }
                            ssid = ssid.replaceAll(""", "");
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return ssid;
        }
    
        /**
         * 检查sim卡状态
         *
         * @param
         * @return
         */
        public static boolean checkSimState(Context context) {
            TelephonyManager tm = (TelephonyManager) context
                    .getSystemService(Context.TELEPHONY_SERVICE);
            if (tm.getSimState() == TelephonyManager.SIM_STATE_ABSENT
                    || tm.getSimState() == TelephonyManager.SIM_STATE_UNKNOWN) {
                return false;
            }
    
            return true;
        }
    
        /**
         * 获取imei
         */
        public static String getImei(Context context) {
            TelephonyManager mTelephonyMgr = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);
            String imei = mTelephonyMgr.getDeviceId();
            if (imei == null) {
                imei = "000000000000000";
            }
            return imei;
        }
    
        public static String getPhoneImsi(Context context) {
            TelephonyManager mTelephonyMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
            return mTelephonyMgr.getSubscriberId();
        }
    
    //    public static CellInfo getNetInfo(Context context) {
    //        CellInfo info = new CellInfo();
    //        try {
    //            TelephonyManager mTelephonyManager = (TelephonyManager) context
    //                    .getSystemService(Context.TELEPHONY_SERVICE);
    //            String operator = mTelephonyManager.getNetworkOperator();
    //            if (operator != null) {
    //                /** 通过operator获取 MCC 和MNC */
    //                if (operator.length() > 3) {
    //                    String mcc = operator.substring(0, 3);
    //                    String mnc = operator.substring(3);
    //                    info.setMcc(mcc);
    //                    info.setMnc(mnc);
    //                }
    //            }
    //
    //            int lac = 0;
    //            int cellId = 0;
    //            int phoneType = mTelephonyManager.getPhoneType();
    //            if (phoneType == TelephonyManager.PHONE_TYPE_GSM) {
    //                GsmCellLocation location = (GsmCellLocation) mTelephonyManager
    //                        .getCellLocation();
    //                /** 通过GsmCellLocation获取中国移动和联通 LAC 和cellID */
    //                lac = location.getLac();
    //                cellId = location.getCid();
    //            } else if (phoneType == TelephonyManager.PHONE_TYPE_CDMA) {
    //                CdmaCellLocation location = (CdmaCellLocation) mTelephonyManager
    //                        .getCellLocation();
    //                lac = location.getNetworkId();
    //                cellId = location.getBaseStationId();
    //                cellId /= 16;
    //            }
    //            if (lac == 0 || cellId == 0) {
    //                List<NeighboringCellInfo> infos = mTelephonyManager
    //                        .getNeighboringCellInfo();
    //                int lc = 0;
    //                int ci = 0;
    //                int rssi = 0;
    //                for (NeighboringCellInfo cell : infos) {
    //                    // 根据邻区总数进行循环
    //                    if (lc == 0 || ci == 0) {
    //                        lc = cell.getLac();
    //                        ci = cell.getCid();
    //                        rssi = cell.getRssi();
    //                    }
    //                    // sb.append(" LAC : " + info.getLac());
    //                    // // 取出当前邻区的LAC
    //                    // sb.append(" CID : " + info.getCid());
    //                    // // 取出当前邻区的CID
    //                    // sb.append(" BSSS : " + (-113 + 2 * info.getRssi()) +
    //                    // "
    "); // 获取邻区基站信号强度
    //                }
    //                rssi = -113 + 2 * rssi;
    //            }
    //        } catch (Exception e) {
    //            e.printStackTrace();
    //        }
    //        return info;
    //    }
    
    }
  • 相关阅读:
    Cortex-M3 在C中上报入栈的寄存器和各fault状态寄存器
    Cortex-M3 双堆栈指针(MSP&PSP)
    Cortex-M3 异常返回值EXC_RETURN
    Cortex-M3 异常中断响应与返回
    Cortex-M3 操作模式与特权等级
    Cortex-M3 R0~R15寄存器组 & 特殊功能寄存器组
    【Python】批量修改指定目录下所有文件的文件名/后缀
    【EMV L2】EMV终端数据
    【EMV L2】Cardholder Verification Rule(CVR) Format
    【EMV L2】GPO响应以及AIP、AFL
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/5669829.html
Copyright © 2011-2022 走看看