0

以下のコードを使用して、ネットワークが利用可能かどうかを確認していますが、ネットワークは利用可能ですが、データ転送がない場合があります。これにより、インターネット接続が失敗し、例外がスローされます。

これはコードです:

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

それで、誰が解決策を見つけるのを手伝ってくれますか?

ありがとう

4

2 に答える 2

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;
        } 
    }
于 2013-08-14T16:46:59.043 に答える
0

ユーザーは BT openzone または同様の接続を使用している可能性があります。接続はできますが、Web ブラウザーを介してパスワードを入力するまでインターネットにアクセスできません。データ接続の問題は常に発生します。それぞれの場合に対処する必要があります。

また、チェックアウト

isConnectedOrConnecting()

ユーザーがまだ接続を確立しているかどうかを確認します。http://developer.android.com/reference/android/net/NetworkInfo.htmlを参照してください

于 2013-08-14T16:50:18.637 に答える