1

Android で WIFI 設定を構成するのに役立つアプリを作成しています。インターネット接続が機能しているかどうかを確認する最速の方法が必要です。動作中の接続 - WIFI 接続だけではありません!

私はこのコードを使用しています

URL url = new URL("http://www.google.com");
                                final HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
                                urlc.setRequestProperty("User-Agent", "Android Application");
                                urlc.setRequestProperty("Connection", "close");
                                        urlc.setConnectTimeout(3 * 1000);
                                        urlc.connect();

                                        if (urlc.getResponseCode() == 200) { // Good response



                                        } else { 
                                        //bad   

                                        }
                                    } catch (IOException e) {
                                         //bad
                                    }

応答を得るまでに約 20 秒かかります (タイムアウトが 3 秒なのに?)。これを行うより速い方法はありますか?

4

2 に答える 2

0

あなたのコードはうまく見えます、おそらくあなたも追加した方がうまくいくでしょうurlc.setReadTimeout(TIME_OUT);

以下は私が使用しているコードであり、これまでのところWiFi /モバイル接続のさまざまなシナリオを捉えていますが、インターネットなどはありません。

public boolean isNetworksAvailable() {
    ConnectivityManager mConnMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    if (mConnMgr != null)  {
        NetworkInfo[] mNetInfo = mConnMgr.getAllNetworkInfo();
        if (mNetInfo != null) {
            for (int i = 0; i < mNetInfo.length; i++) {
                if (mNetInfo[i].getState() == NetworkInfo.State.CONNECTED) {
                    return true;
                }
            }
        }
    }
    return false;
}

このコードが行うことは、すべてのネットワーク状態をループして、CONNECTED状態を確実に検出することです。isNetworksAvailable()

で、isInternetConnected単純なHTTPURL接続を作成できるかどうかを確認します。

public boolean isInternetConnected(String mUrl) {
    final int CONNECTION_TIMEOUT = 2000;
    if (isNetworksAvailable()) {
        try {
            HttpURLConnection mURLConnection = (HttpURLConnection) (new URL(mUrl).openConnection());
            mURLConnection.setRequestProperty("User-Agent", "ConnectionTest");
            mURLConnection.setRequestProperty("Connection", "close");
            mURLConnection.setConnectTimeout(CONNECTION_TIMEOUT);
            mURLConnection.setReadTimeout(CONNECTION_TIMEOUT);
            mURLConnection.connect();
            return (mURLConnection.getResponseCode() == 200);
        } catch (IOException ioe) {
            Log.e("isInternetConnected", "Exception occured while checking for Internet connection: ", ioe);
        }
    } else {
        Log.e("isInternetConnected", "Not connected to WiFi/Mobile and no Internet available.");
    }
    return false;
}

このコードはAsyncTaskで使用する必要があります。そうでない場合は、次のコードで使用する必要があります。たとえば、onCreate()(ただし、UIスレッドでネットワークを実行する代わりにAsyncTaskを使用することを強くお勧めします)

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

インターネットに接続されているかどうかをテストします。

if (isInternetConnected("http://www.google.com")) {
    showToast("Internet connected");
} else {
    showToast("No connection to the Internet!");
}
于 2013-01-04T00:09:50.580 に答える
-1

サーバー呼び出しを行う前に、以下のメソッドを使用してください。

public static boolean isOnline() {

    try {
        ConnectivityManager cm = (ConnectivityManager) Const.CONTEXT
                .getSystemService(Context.CONNECTIVITY_SERVICE);

        if (cm != null) {
            return cm.getActiveNetworkInfo().isConnectedOrConnecting();
        } else {
            return false;
        }
    } catch (Exception e) {
        return false;
    }
}
于 2012-12-28T11:03:55.223 に答える