如何检查是否有可用网络上的数据传输?

时间:2013-08-14 16:39:40

标签: android

我使用下面的代码检查是否有可用的网络,但有时候 网络可用,但没有数据传输,这是我的互联网 连接失败并抛出异常。

这是代码:

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

那么,谁能帮我找到解决方案?

由于

2 个答案:

答案 0 :(得分:1)

我正在使用以下代码来检查连接性,因为我认为仅仅确定网络信息并不能保证互联网连接。因此,我认为最好向远程URL发出实际的HTTP请求,看看它是否成功。

    public static boolean isInternetAvailable(Context cxt) {

        ConnectivityManager cm = (ConnectivityManager) cxt
                .getSystemService(Context.CONNECTIVITY_SERVICE);

        NetworkInfo netInfo = cm.getActiveNetworkInfo();

        if (netInfo != null && netInfo.isConnectedOrConnecting() && canHit()) {

            Log.i(App.TAG, "Network connection available.");
            return true;
        }

        return false;
    }

    public static boolean canHit() {

        try {

            URL url = new URL("http://www.google.com/");
            HttpURLConnection urlConnection = (HttpURLConnection) url
                    .openConnection();
            urlConnection.setConnectTimeout(3000);
            urlConnection.connect();
            urlConnection.disconnect();
            return true;

        } catch (Exception e){  
            e.printStackTrace();
            return false;
        } 
    }

答案 1 :(得分:0)

用户可能在BT openzone或类似的连接上,他们有连接,但在通过网络浏览器提供密码之前无法访问互联网。数据连接问题总是会发生,你只需要在每种情况下处理它们。

同时结帐

isConnectedOrConnecting()

检查用户是否仍在建立连接。见http://developer.android.com/reference/android/net/NetworkInfo.html