
项目中难免会出现使用网络的情况,使用网络前得进行网络判断,看网上的网友一般有多种实现版本。
第一种:
// 是否有网络连接
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.****.net/heng615975867/article/details/17280227
[3] 关于NetworkInfo对象的isConnected()与isAvailable().http://www.oschina.net/question/54100_34632