现在手机APP基本上都需要联网,需要进行网络判断,一般有以下几个需求:
1.判断网络是否连接:
/**
* 判断网络是否连接
*/
public static boolean isConnected(Context context) {
ConnectivityManager manager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (manager != null) {
NetworkInfo info = manager.getActiveNetworkInfo();
if (info != null && info.isConnected()) {
if (info.getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
return false;
}
2.判断连接的网络是手机网络还是WIFI网络:
/**
* 判断连接的网络状态
*/
public static int getNetWorkState(Context context) {
//得到连接管理器对象
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager
.getActiveNetworkInfo();
//如果网络连接,判断该网络类型
if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) {
if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_WIFI)) {
return NETWORK_WIFI;//wifi
} else if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_MOBILE)) {
return NETWORK_MOBILE;//mobile
}
} else {
//网络异常
return NETWORK_NONE;
}
return NETWORK_NONE;
}
3.判断连接的网络能否上网:
/**
* 判断连接的网络是否可用,只能首次判断,
* 如果连接时网络可用,后来网络不可用了,此时判断的还是可用
* 需要版本在23以上
*/
public static boolean isNetworkOnline(Context context) {
boolean isOnline = false;
try {
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkCapabilities capabilities = manager.getNetworkCapabilities(manager.getActiveNetwork());
if (capabilities != null) {
if (capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
&& capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) {
isOnline = true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return isOnline;
}
/**
* 判断连接的网络是否可用,但是需要时间
*/
public static boolean isNetworkOnline2() {
boolean isOnline = false;
try {
Runtime runtime = Runtime.getRuntime();
Process p = runtime.exec("ping -c 1 8.8.8.8");
int waitFor = p.waitFor();
isOnline = waitFor == 0;
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
return isOnline;
}
完整代码
public class NetUtil {
/**
* 没有网络
*/
public static final int NETWORK_NONE = -1;
/**
* 移动网络
*/
public static final int NETWORK_MOBILE = 0;
/**
* 无线网络
*/
public static final int NETWORK_WIFI = 1;
/**
* 判断网络是否连接
*/
public static boolean isConnected(Context context) {
ConnectivityManager manager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (manager != null) {
NetworkInfo info = manager.getActiveNetworkInfo();
if (info != null && info.isConnected()) {
if (info.getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
return false;
}
/**
* 判断连接的网络是否可用,只能首次判断,
* 如果连接时网络可用,后来网络不可用了,此时判断的还是可用
* 需要版本在23以上
*/
public static boolean isNetworkOnline(Context context) {
boolean isOnline = false;
try {
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkCapabilities capabilities = manager.getNetworkCapabilities(manager.getActiveNetwork());
if (capabilities != null) {
if (capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
&& capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) {
isOnline = true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return isOnline;
}
/**
* 判断连接的网络是否可用,但是需要时间
*/
public static boolean isNetworkOnline2() {
boolean isOnline = false;
try {
Runtime runtime = Runtime.getRuntime();
Process p = runtime.exec("ping -c 1 8.8.8.8");
int waitFor = p.waitFor();
isOnline = waitFor == 0;
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
return isOnline;
}
/**
* 判断连接的网络状态
*/
public static int getNetWorkState(Context context) {
//得到连接管理器对象
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager
.getActiveNetworkInfo();
//如果网络连接,判断该网络类型
if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) {
if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_WIFI)) {
return NETWORK_WIFI;//wifi
} else if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_MOBILE)) {
return NETWORK_MOBILE;//mobile
}
} else {
//网络异常
return NETWORK_NONE;
}
return NETWORK_NONE;
}
}