检查网站是否可用

时间:2013-08-07 18:22:21

标签: android httpurlconnection

我正在检查设备的网络状态。使用: -

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager 
              = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();

我想进一步考虑这一点并检查设备是否可以访问互联网或某个特定网站,例如http://www.google.com,如果它可以返回为真,如果它不能返回为假。

我的代码的问题是,如果设备连接到路由器并且路由器处于脱机状态,它将返回true。我需要一个实际的互联网连接检查。

修改后的代码

public void GoToStation(View v)
{

    try {
        InetAddress ina = InetAddress.getByName("http://188.65.176.98/");

        if(ina.isReachable(3000)) {

                  Intent myIntent = new Intent(MainActivity.this, CustomizedListViewStation.class);
                  startActivityForResult(myIntent, 0);

        } else {
            Toast.makeText(this, "You need a data connection to view Safety Zones", Toast.LENGTH_LONG).show(); 
        } 
    } catch (IOException ioe) {
        ioe.printStackTrace();

    }

2 个答案:

答案 0 :(得分:3)

你可以这样做:

boolean isAvailable(URL url){
    try {
      HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
      urlConnection.connect();
      urlConnection.disconnect();
      return true;
    } catch (IOException e) {
          Log.e(TAG, "Exception", e);
    }
    return false;
}

答案 1 :(得分:1)

要检查实际的互联网连接,您可以尝试访问某些远程服务器。例如:

try {
    InetAddress ina = InetAddress.getByName([server]);

    if(ina.isReachable(3000)) {
        System.out.println("Internet Connection");
    } else {
        System.out.println("No internet connection");
    } 
} catch (IOException ioe) {
    ioe.printStackTrace();

}

[server]是尝试连接的服务器。您应该使用自己的服务器,因为为此目的使用其他人的带宽是不礼貌的(加上使用您自己的服务器更可靠)。

另一种方法是检查是否有Android API执行此操作,因为Android会检查与Google服务器的连接。我不确定这个状态是否会在API的任何地方公开。