博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android NetWorkUtil
阅读量:5935 次
发布时间:2019-06-19

本文共 18382 字,大约阅读时间需要 61 分钟。

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) + "\n" + 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
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()) +// // "\n"); // 获取邻区基站信号强度// }// rssi = -113 + 2 * rssi;// }// } catch (Exception e) {// e.printStackTrace();// }// return info;// }}

 

转载地址:http://ayjtx.baihongyu.com/

你可能感兴趣的文章
Vue.js 入门指南之“前传”(含sublime text 3 配置)
查看>>
ArcGIS Engine开发之旅02--ArcGIS Engine中的类库
查看>>
源码编译失败的时候,重新编译
查看>>
Android开发之SD卡上文件操作
查看>>
Charles抓包https
查看>>
c++ 读写Excel及数据导入SQLServer
查看>>
改造 Android 官方架构组件 ViewModel
查看>>
“地球一小时”?看看“熊孩子”怎么说
查看>>
“法国好物盛典”京东超市邀您开启沉“醉”的浪漫
查看>>
IT168带你一图读懂H3C MS4300V2安防交换机
查看>>
SACC 2018:区块链的世界没有权威!
查看>>
汽车之家数据库服务化平台从0到1的实践过程
查看>>
恒大健康:合资公司再向仲裁中心申请剥夺时颖资产抵押权
查看>>
《我爱我家》主创重聚北京台春晚 宋丹丹感谢英达
查看>>
「每天一道面试题」CountDownLatch实现原理及适用场景?
查看>>
中科院海洋所破译对虾基因组并获国际首个高质量对虾基因组参考图谱
查看>>
中国鄂西地区页岩气调查取得重大突破
查看>>
美国机场安检人员计划外缺席率达10% 创历史纪录
查看>>
花呗能不能不还?支付宝说春节集五福中彩蛋可帮还
查看>>
贵州荔波:十四年办好一个节带富一方人
查看>>