1

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

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();

    }
4

2 回答 2

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;
}
于 2013-08-07T20:11:47.310 回答
2

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

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 中公开。

于 2013-08-07T18:31:41.723 回答