Java 如何检查网络是否可用

Java 如何检查网络是否可用,java,android,networking,connection,Java,Android,Networking,Connection,我正在编写一个应用程序,它通过POST方法向服务器发送一些数据并接收响应。为此,我首先需要检查网络是否可用。我使用的方法是: private boolean isNetworkAvailable() { ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = conn

我正在编写一个应用程序,它通过
POST
方法向服务器发送一些数据并接收响应。为此,我首先需要检查网络是否可用。我使用的方法是:

private boolean isNetworkAvailable() {
    ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connManager.getActiveNetworkInfo();

    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

然而,这个函数不是很精确。例如,有时状态栏中的“我的设备网络”指示器显示它当前连接到
EDGE
网络或
3G
网络,但当我尝试访问该网络时,它立即开始更改为另一种网络类型并更改回,并且没有实际有效的连接,但是这个函数仍然返回
true
。如何确保网络连接有效,并通过网络发送数据

我认为没有直接API来检查连接是否有效。您只能检测是否连接到路由器。
您可以尝试连接到已知的稳定域,以检查它是否连接。但若要执行此检查,您需要在连接中添加额外的延迟,您必须尝试连接到服务器并获取响应代码以检查连接

试试这个

public boolean isOnline(Context context) {
try {
    ConnectivityManager cm = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); 
    if (cm.getActiveNetworkInfo().isConnectedOrConnecting()) {
        URL url = new URL("http://www.ripansekhon.blogspot.com");
        HttpURLConnection urlc = (HttpURLConnection) url .openConnection();
        urlc.setRequestProperty("User-Agent", "test");
        urlc.setRequestProperty("Connection", "close"); 
        urlc.setConnectTimeout(1000); // mTimeout is in seconds
        urlc.connect();
        if (urlc.getResponseCode() == 200) {
            return true;
        } else {
            return false;
        }
    }
} catch (IOException e) {
    e.printStackTrace();
}
return false;
}

退房