如果互联网可用,请持续检查

时间:2014-07-09 07:52:50

标签: android wifi

我已经构建了一个需要连续访问Internet的Android应用程序。我想连续检查它,不仅是设备连接到WiFi还是它可以检索数据(有时它连接到WiFi但仍然没有互联网访问)。有没有办法实现这一目标?此方法对用户也是友好的(它会占用更多数据)吗?

2 个答案:

答案 0 :(得分:0)

  

我想连续检查,不仅是设备已连接   到WiFi,但它也可以检索数据(有时它是   连接到WiFi,但仍然没有互联网接入)。有没有   实现这一目标的方法?

是的,这是可能的。来自here的代码:

public boolean isOnline() {
    ConnectivityManager cm =
        (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
        return true;
    }
    return false;
}

您可以在发出网络请求之前运行此功能。

或者,您可以实施BoadcastReceiver并收到有关网络连接更改的通知。您需要注册该操作:

<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>

developer guide中的更多信息。

答案 1 :(得分:0)

你可以使用它。

public boolean isConnected() {
    ConnectivityManager cm =
        (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
        return true;
    }
    return false;
}

isConnected用于检查与网络的连接,然后使用以下代码检查Internet可访问性

public boolean isOnline() {

    if (isConnected()) {
        try {
            URL url = new URL("http://www.google.com");  // or any valid link.
            HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
            urlc.setConnectTimeout(3000);
            urlc.connect();
            if (urlc.getResponseCode() == 200) {
                return true;
            }
        } catch (MalformedURLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    return false;
}

您可以从服务器类

调用此方法