手机网络判断

来源:互联网 发布:笛子校音器软件 编辑:程序博客网 时间:2024/06/09 17:43

这是对应的参数类型


/**     * GPRS    2G(2.5) General Packet Radia Service 114kbps     * EDGE    2G(2.75G) Enhanced Data Rate for GSM Evolution 384kbps     * UMTS    3G WCDMA 联通3G Universal MOBILE Telecommunication System 完整的3G移动通信技术标准     * CDMA    2G 电信 Code Division Multiple Access 码分多址     * EVDO_0  3G (EVDO 全程 CDMA2000 1xEV-DO) Evolution - Data Only (Data Optimized) 153.6kps - 2.4mbps 属于3G     * EVDO_A  3G 1.8mbps - 3.1mbps 属于3G过渡,3.5G     * 1xRTT   2G CDMA2000 1xRTT (RTT - 无线电传输技术) 144kbps 2G的过渡,     * HSDPA   3.5G 高速下行分组接入 3.5G WCDMA High Speed Downlink Packet Access 14.4mbps     * HSUPA   3.5G High Speed Uplink Packet Access 高速上行链路分组接入 1.4 - 5.8 mbps     * HSPA    3G (分HSDPA,HSUPA) High Speed Packet Access     * IDEN    2G Integrated Dispatch Enhanced Networks 集成数字增强型网络 (属于2G,来自维基百科)     * EVDO_B  3G EV-DO Rev.B 14.7Mbps 下行 3.5G     * LTE     4G Long Term Evolution FDD-LTE 和 TDD-LTE , 3G过渡,升级版 LTE Advanced 才是4G     * EHRPD   3G CDMA2000向LTE 4G的中间产物 Evolved High Rate Packet Data HRPD的升级     * HSPAP   3G HSPAP 比 HSDPA 快些     *     * @return {@link  NetWorkType}     */
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

自己写的判断网络的工具类

 package me.anany.weikandian.utils;import android.content.Context;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.telephony.TelephonyManager;import android.util.Log;import java.lang.reflect.Method;/** * Created by houshuai * <p> * Email:houshuai0816@gmail.com */public class NetworkUtil {    private static final String TAG = NetworkUtil.class.getSimpleName();    /**     * 获取ConnectivityManager     */    public static ConnectivityManager getConnectivityManager(Context context) {        return (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);    }    /**     * 获取ConnectivityManager     */    public static TelephonyManager getTelephonyManager(Context context) {        return (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);    }    //    //public enum NetSubType {    //    NONE(1),    //    MOBILE(2),    //    WIFI(4),    //    OTHER(8);    //    //    NetType(int value) {    //        this.value = value;    //    }    //    //    public int value;    //}    /**     * 判断网络连接是否有效(此时可传输数据)。     *     * @return boolean 不管wifi,还是mobile net,只有当前在连接状态(可有效传输数据)才返回true,反之false。     */    public static boolean isConnected(Context context) {        NetworkInfo net = getConnectivityManager(context).getActiveNetworkInfo();        return net != null && net.isConnected();    }    /**     * 判断有无网络正在连接中(查找网络、校验、获取IP等)。     *     * @return boolean 不管wifi,还是mobile net,只有当前在连接状态(可有效传输数据)才返回true,反之false。     */    public static boolean isConnectedOrConnecting(Context context) {        NetworkInfo[] nets = getConnectivityManager(context).getAllNetworkInfo();        if (nets != null) {            for (NetworkInfo net : nets) {                if (net.isConnectedOrConnecting()) {                    return true;                }            }        }        return false;    }    public static NetType getConnectedType(Context context) {        NetworkInfo net = getConnectivityManager(context).getActiveNetworkInfo();        if (net != null) {            switch (net.getType()) {                case ConnectivityManager.TYPE_WIFI:                    return NetType.WIFI;                case ConnectivityManager.TYPE_MOBILE:                    return NetType.MOBILE;                default:                    return NetType.OTHER;            }        }        return NetType.NONE;    }    /**     * 是否存在有效的WIFI连接     */    public static boolean isWifiConnected(Context context) {        NetworkInfo net = getConnectivityManager(context).getActiveNetworkInfo();        return net != null && net.getType() == ConnectivityManager.TYPE_WIFI && net.isConnected();    }    /**     * 是否存在有效的移动连接     *     * @return boolean     */    public static boolean isMobileConnected(Context context) {        NetworkInfo net = getConnectivityManager(context).getActiveNetworkInfo();        return net != null && net.getType() == ConnectivityManager.TYPE_MOBILE && net.isConnected();    }    /**     * 检测网络是否为可用状态     */    public static boolean isAvailable(Context context) {        return isWifiAvailable(context) || (isMobileAvailable(context) && isMobileEnabled(context));    }    /**     * 判断是否有可用状态的Wifi,以下情况返回false:     * 1. 设备wifi开关关掉;     * 2. 已经打开飞行模式;     * 3. 设备所在区域没有信号覆盖;     * 4. 设备在漫游区域,且关闭了网络漫游。     *     * @return boolean wifi为可用状态(不一定成功连接,即Connected)即返回ture     */    public static boolean isWifiAvailable(Context context) {        NetworkInfo[] nets = getConnectivityManager(context).getAllNetworkInfo();        if (nets != null) {            for (NetworkInfo net : nets) {                if (net.getType() == ConnectivityManager.TYPE_WIFI) {                    return net.isAvailable();                }            }        }        return false;    }    /**     * 判断有无可用状态的移动网络,注意关掉设备移动网络直接不影响此函数。     * 也就是即使关掉移动网络,那么移动网络也可能是可用的(彩信等服务),即返回true。     * 以下情况它是不可用的,将返回false:     * 1. 设备打开飞行模式;     * 2. 设备所在区域没有信号覆盖;     * 3. 设备在漫游区域,且关闭了网络漫游。     *     * @return boolean     */    public static boolean isMobileAvailable(Context context) {        NetworkInfo[] nets = getConnectivityManager(context).getAllNetworkInfo();        if (nets != null) {            for (NetworkInfo net : nets) {                if (net.getType() == ConnectivityManager.TYPE_MOBILE) {                    return net.isAvailable();                }            }        }        return false;    }    /**     * 设备是否打开移动网络开关     *     * @return boolean 打开移动网络返回true,反之false     */    public static boolean isMobileEnabled(Context context) {        try {            Method getMobileDataEnabledMethod = ConnectivityManager.class.getDeclaredMethod("getMobileDataEnabled");            getMobileDataEnabledMethod.setAccessible(true);            return (Boolean) getMobileDataEnabledMethod.invoke(getConnectivityManager(context));        } catch (Exception e) {            e.printStackTrace();        }        // 反射失败,默认开启        return true;    }    /**     * 打印当前各种网络状态     *     * @return boolean     */    public static boolean printNetworkInfo(Context context) {        ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);        if (connectivity != null) {            NetworkInfo in = connectivity.getActiveNetworkInfo();            Log.i(TAG, "-------------$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$-------------");            Log.i(TAG, "getActiveNetworkInfo: " + in);            NetworkInfo[] info = connectivity.getAllNetworkInfo();            if (info != null) {                for (int i = 0; i < info.length; i++) {                    // if (info[i].getType() == ConnectivityManager.TYPE_WIFI) {                    Log.i(TAG, "NetworkInfo[" + i + "]isAvailable : " + info[i].isAvailable());                    Log.i(TAG, "NetworkInfo[" + i + "]isConnected : " + info[i].isConnected());                    Log.i(TAG, "NetworkInfo[" + i + "]isConnectedOrConnecting : " + info[i].isConnectedOrConnecting());                    Log.i(TAG, "NetworkInfo[" + i + "]: " + info[i]);                    // }                }                Log.i(TAG, "\n");            } else {                Log.i(TAG, "getAllNetworkInfo is null");            }        }        return false;    }    /**     * get connected network type by {@link ConnectivityManager}     * <p>     * such as WIFI, MOBILE, ETHERNET, BLUETOOTH, etc.     *     * @return {@link ConnectivityManager#TYPE_WIFI}, {@link ConnectivityManager#TYPE_MOBILE},     * {@link ConnectivityManager#TYPE_ETHERNET}...     */    public static int getConnectedTypeINT(Context context) {        NetworkInfo net = getConnectivityManager(context).getActiveNetworkInfo();        if (net != null) {            Log.i(TAG, "NetworkInfo: " + net.toString());            return net.getType();        }        return -1;    }    /**     * get network type by {@link TelephonyManager}     * <p>     * such as 2G, 3G, 4G, etc.     *     * @return {@link TelephonyManager#NETWORK_TYPE_CDMA}, {@link TelephonyManager#NETWORK_TYPE_GPRS},     * {@link TelephonyManager#NETWORK_TYPE_LTE}...     */    public static int getTelNetworkTypeINT(Context context) {        return getTelephonyManager(context).getNetworkType();    }    /**     * GPRS    2G(2.5) General Packet Radia Service 114kbps     * EDGE    2G(2.75G) Enhanced Data Rate for GSM Evolution 384kbps     * UMTS    3G WCDMA 联通3G Universal MOBILE Telecommunication System 完整的3G移动通信技术标准     * CDMA    2G 电信 Code Division Multiple Access 码分多址     * EVDO_0  3G (EVDO 全程 CDMA2000 1xEV-DO) Evolution - Data Only (Data Optimized) 153.6kps - 2.4mbps 属于3G     * EVDO_A  3G 1.8mbps - 3.1mbps 属于3G过渡,3.5G     * 1xRTT   2G CDMA2000 1xRTT (RTT - 无线电传输技术) 144kbps 2G的过渡,     * HSDPA   3.5G 高速下行分组接入 3.5G WCDMA High Speed Downlink Packet Access 14.4mbps     * HSUPA   3.5G High Speed Uplink Packet Access 高速上行链路分组接入 1.4 - 5.8 mbps     * HSPA    3G (分HSDPA,HSUPA) High Speed Packet Access     * IDEN    2G Integrated Dispatch Enhanced Networks 集成数字增强型网络 (属于2G,来自维基百科)     * EVDO_B  3G EV-DO Rev.B 14.7Mbps 下行 3.5G     * LTE     4G Long Term Evolution FDD-LTE 和 TDD-LTE , 3G过渡,升级版 LTE Advanced 才是4G     * EHRPD   3G CDMA2000向LTE 4G的中间产物 Evolved High Rate Packet Data HRPD的升级     * HSPAP   3G HSPAP 比 HSDPA 快些     *     * @return {@link  NetWorkType}     */    public static NetWorkType getNetworkType(Context context) {        int type = getConnectedTypeINT(context);        switch (type) {            case ConnectivityManager.TYPE_WIFI:                return NetWorkType.WIFI;            case ConnectivityManager.TYPE_MOBILE:            case ConnectivityManager.TYPE_MOBILE_DUN:            case ConnectivityManager.TYPE_MOBILE_HIPRI:            case ConnectivityManager.TYPE_MOBILE_MMS:            case ConnectivityManager.TYPE_MOBILE_SUPL:                int teleType = getTelephonyManager(context).getNetworkType();                switch (teleType) {                    case TelephonyManager.NETWORK_TYPE_GPRS:                    case TelephonyManager.NETWORK_TYPE_EDGE:                    case TelephonyManager.NETWORK_TYPE_CDMA:                    case TelephonyManager.NETWORK_TYPE_1xRTT:                    case TelephonyManager.NETWORK_TYPE_IDEN:                        return NetWorkType.NET_2_G;                    case TelephonyManager.NETWORK_TYPE_UMTS:                    case TelephonyManager.NETWORK_TYPE_EVDO_0:                    case TelephonyManager.NETWORK_TYPE_EVDO_A:                    case TelephonyManager.NETWORK_TYPE_HSDPA:                    case TelephonyManager.NETWORK_TYPE_HSUPA:                    case TelephonyManager.NETWORK_TYPE_HSPA:                    case TelephonyManager.NETWORK_TYPE_EVDO_B:                    case TelephonyManager.NETWORK_TYPE_EHRPD:                    case TelephonyManager.NETWORK_TYPE_HSPAP:                        return NetWorkType.NET_3_G;                    case TelephonyManager.NETWORK_TYPE_LTE:                        return NetWorkType.NET_4_G;                    default:                        return NetWorkType.UN_KNOWN;                }            default:                return NetWorkType.UN_KNOWN;        }    }    public enum NetType {        NONE(1),        MOBILE(2),        WIFI(4),        OTHER(8);        public int value;        NetType(int value) {            this.value = value;        }    }    public enum NetWorkType {        UN_KNOWN(-1),        WIFI(1),        NET_2_G(2),        NET_3_G(3),        NET_4_G(4);        public int value;        NetWorkType(int value) {            this.value = value;        }    }}
原创粉丝点击