建议你们用方案一,经过实测方案二只判断设备有没有插入SIM卡或连WIFI,如果连上手机热点,手机关闭数据流量,这个时候方案二仍然返回true,会存在这么一种异常情况,建议使用方案一就没有这个问题
public class NetworkDiagnostics {
//方案一
public static void start(){
new Thread(new Runnable() {
@Override
public void run() {
try {
Process process = Runtime.getRuntime().exec("/system/bin/ping -c 1 -w 100 www.baidu.com");
int status = process.waitFor(); //如果status==0则表示网络可用,其中参数-c 1是指ping的次数为1次,-w是指超时时间单位为s
if (status==0){ //网络能通
Log.d("wangrui","网络分析方案1=true");
}else{
Log.d("wangrui","网络分析方案1=false");
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
//方案二
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager == null) {
return false;
} else {
// 获取NetworkInfo对象
NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo();
if (networkInfo != null && networkInfo.length > 0) {
for (int i = 0; i < networkInfo.length; i++) {
// 判断当前网络状态是否为连接状态
if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}
}