Android开发(七)——判断网络状态

项目中难免会出现使用网络的情况,使用网络前得进行网络判断,看网上的网友一般有多种实现版本。

第一种:

// 是否有网络连接
    public static boolean isNetworkConnected() {
        if (App.getContext() != null) {
            ConnectivityManager mConnectivityManager = (ConnectivityManager) App
                    .getContext()
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo mNetworkInfo = mConnectivityManager
                    .getActiveNetworkInfo();
            if (mNetworkInfo != null) {
                return mNetworkInfo.isAvailable();
            }
        }
        return false;
    }

第二种:

/**
     * 判断网络是否可用
     * 
     * @param context
     * @return
     */
    public static boolean isNetworkAvailable(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        if (cm != null) {
            NetworkInfo[] info = cm.getAllNetworkInfo();
            if (info != null) {
                for (int i = 0; i < info.length; i++) {
                    if (info[i].isConnected()) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

其中主要的使用区别是isConnected()与isAvailable(),参考文章[3],总结5种连接状态情况:

在WLAN设置界面状态 输出
显示连接已保存,但标题栏没有,即没有实质连接上 输出为:not connect, available
显示连接已保存,标题栏也有已连接上的图标  输出为:connect, available
选择不保存后   输出为:not connect, available
选择连接,在正在获取IP地址时  输出为:not connect, not available
连接上后 输出为:connect, available

建议使用:

// 是否有网络连接
    public static boolean isNetworkConnected() {
        if (App.getContext() != null) {
            ConnectivityManager mConnectivityManager = (ConnectivityManager) App
                    .getContext()
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo mNetworkInfo = mConnectivityManager
                    .getActiveNetworkInfo();
            if (mNetworkInfo != null) {
                return mNetworkInfo.isAvailable() && mNetworkInfo.isConnected();
            }
        }
        return false;
    }

参考:

[1] http://www.cnblogs.com/codeworker/archive/2012/04/23/2467180.html

[2] http://blog.csdn.net/heng615975867/article/details/17280227

[3] 关于NetworkInfo对象的isConnected()与isAvailable().http://www.oschina.net/question/54100_34632

原文地址:https://www.cnblogs.com/ccdc/p/4432583.html