Android 判断网络是否可用

建议你们用方案一,经过实测方案二只判断设备有没有插入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;

}

}