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;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_27494201/article/details/135425880