public class NetworkUtil {    //没有网络连接    public static final int NETWORN_NONE = 0;    //wifi连接    public static final int NETWORN_WIFI = 1;    //手机网络数据连接类型    public static final int NETWORN_2G = 2;    public static final int NETWORN_3G = 3;    public static final int NETWORN_4G = 4;    public static final int NETWORN_MOBILE = 5;    /**     * 获取当前网络连接类型     *     * @param context     * @return     */    public static int getNetworkType(Context context) {        //获取系统的网络服务        ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);        //如果当前没有网络        if (null == connManager)            return NETWORN_NONE;        //获取当前网络类型,如果为空,返回无网络        NetworkInfo activeNetInfo = connManager.getActiveNetworkInfo();        if (activeNetInfo == null || !activeNetInfo.isAvailable()) {            return NETWORN_NONE;        }        // 判断是不是连接的是不是wifi        NetworkInfo wifiInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);        if (null != wifiInfo) {            NetworkInfo.State state = wifiInfo.getState();            if (null != state)                if (state == NetworkInfo.State.CONNECTED || state == NetworkInfo.State.CONNECTING) {                    return NETWORN_WIFI;                }        }        // 如果不是wifi,则判断当前连接的是运营商的哪种网络2g、3g、4g等        NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);        if (null != networkInfo) {            NetworkInfo.State state = networkInfo.getState();            String strSubTypeName = networkInfo.getSubtypeName();            if (null != state)                if (state == NetworkInfo.State.CONNECTED || state == NetworkInfo.State.CONNECTING) {                    switch (activeNetInfo.getSubtype()) {                        //如果是2g类型                        case TelephonyManager.NETWORK_TYPE_GPRS: // 联通2g                        case TelephonyManager.NETWORK_TYPE_CDMA: // 电信2g                        case TelephonyManager.NETWORK_TYPE_EDGE: // 移动2g                        case TelephonyManager.NETWORK_TYPE_1xRTT:                        case TelephonyManager.NETWORK_TYPE_IDEN:                            return NETWORN_2G;                        //如果是3g类型                        case TelephonyManager.NETWORK_TYPE_EVDO_A: // 电信3g                        case TelephonyManager.NETWORK_TYPE_UMTS:                        case TelephonyManager.NETWORK_TYPE_EVDO_0:                        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 NETWORN_3G;                        //如果是4g类型                        case TelephonyManager.NETWORK_TYPE_LTE:                            return NETWORN_4G;                        default:                            //中国移动 联通 电信 三种3G制式                            if (strSubTypeName.equalsIgnoreCase("TD-SCDMA") || strSubTypeName.equalsIgnoreCase("WCDMA") || strSubTypeName.equalsIgnoreCase("CDMA2000")) {                                return NETWORN_3G;                            } else {                                return NETWORN_MOBILE;                            }                    }                }        }        return NETWORN_NONE;    }    //判断网络是否连接(是否打开移动网络或者是连接wifi)    public static boolean isNetworkAvailable(Context context) {        if (context != null) {            ConnectivityManager mConnectivityManager = (ConnectivityManager) context                    .getSystemService(Context.CONNECTIVITY_SERVICE);            NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();            if (mNetworkInfo != null) {                return mNetworkInfo.isAvailable();            }        }        return false;    }    //判断外网是否可用(常用于wifi已经连接但是无法访问外网的情况),耗时操作,不应该放在主线程    public static boolean isNetworkOnline() {        Runtime runtime = Runtime.getRuntime();        try {            String ip = "www.baidu.com";// 除非百度挂了,否则用这个应该没问题~            Process ipProcess = runtime.getRuntime().exec("ping -c 3 -w 100 " + ip);//ping3次            int exitValue = ipProcess.waitFor();            return (exitValue == 0);        } catch (IOException | InterruptedException e) {            e.printStackTrace();        }        return false;    }}

 

更多相关文章

  1. Android使用Retrofit进行网络请求
  2. Android中判断网络功能是否可用
  3. Android的网络状态判断
  4. Android开发从零开始之java-泛型初步
  5. Android打开/关闭数据流量
  6. 重定向android log
  7. 链接器解析多重定义的全局变量
  8. Android(安卓)7.0 https/tls证书配置问题
  9. 【android测试】值得学习的android测试知识连接

随机推荐

  1. Android(安卓)build.gradle文件详解(转述
  2. android:screenOrientation横屏竖屏设置
  3. Android常用知识笔记
  4. Android(安卓)10ms问题:关于Android音频路
  5. Android(安卓)之 EditText属性用法介绍
  6. android 设置Button或者ImageButton的背
  7. Android(安卓)API中文文档ImageView
  8. Android实现透明的颜色效果
  9. Android(安卓)Camera 方法分析
  10. 三十三、Android给ListView设置分割线Div