项目中难免会出现使用网络的情况,使用网络前得进行网络判断,看网上的网友一般有多种实现版本。
第一种:
// 是否有网络连接 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