测试Internet而不是网络

时间:2014-07-18 18:59:15

标签: android android-internet

通常在构建需要API调用等的Android应用程序时,我会在进行此类调用之前检查NetworkAvailability:

    public boolean networkIsAvailable() {

        boolean result = false;
        ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager
                .getActiveNetworkInfo();
        if (activeNetworkInfo != null) {

            if (activeNetworkInfo.isConnected()) {
                result = true;

            }
        }
        return result;
    }

足够简单......但是当用户在没有移动连接且连接到Wifi网络的设备上时会发生什么,但是Wifi网络没有互联网访问权限。

除了捕获java.net.UnknownHostException以测试实际的互联网访问外,还有其他选择吗?

1 个答案:

答案 0 :(得分:1)

您可以使用:

public static boolean hasActiveInternetConnection(Context context) {
    if (isNetworkAvailable(context)) {
        try {
            HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection());
            urlc.setRequestProperty("User-Agent", "Test");
            urlc.setRequestProperty("Connection", "close");
            urlc.setConnectTimeout(1500); 

            urlc.connect();
            return (urlc.getResponseCode() == 200);
       } catch (IOException e) {
            Log.e(LOG_TAG, "Error checking internet connection", e);
        }
    } else {
        Log.d(LOG_TAG, "No network available!");
    }
    return false;
}

请记住:"正如Tony Cho在下面的评论中指出的那样,请确保您不在主线程上运行此代码,否则您将获得NetworkOnMainThread异常(在Android中) 3.0或更高版本)。请改用AsyncTask或Runnable。"

来源:Detect if Android device has Internet connection