1

インターネットで役立つチュートリアルや開発者サイトのドキュメントが見つかりませんでした。

私のアプリケーションでは、インターネット接続がないときにHttpPostを使用してWebサーバーに接続していますが、 wifiがオンになっていると白い画面が表示され、10〜15秒後に「UnknownHostException」が表示されます。

私はこの例外をキャッチし、トーストのようにしました

Unable to connect, check your internet connection.

アクティビティ(または最初のアクティビティでfinish()を使用しているため、アプリケーション)を閉じます。

Wi-Fi自体がオフになると、次のようなインスタントトーストが表示されます」

You need internet connection to use this Application

しかし、最初のケースはイライラします。10 ~ 15 秒かけてトーストを表示します。

そこで、 HttpParametersを使用して、 5 秒の ConnectionTimeoutパラメータを追加しました。

ただし、アプリケーションは以前と同じように機能します (このパラメーターの影響はありません)。

ConnectionTime (5 秒以上) をヒットしたかどうかを追跡するにはどうすればよいですか。トーストを次のように表示できるように

Slow internet connection

さらに、 Wi-Fiがオンでインターネットがない場合、インターネット接続チェックが機能しないのはなぜですか

これは、アプリケーションが起動されたときに確認するものです。

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

if (isOnline(cm, this, SignUpActivity.this)){
//continue
}

public static boolean isOnline(ConnectivityManager cm, Context c, Activity a) {

    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
        return true;
    }

    Toast.makeText(c, "You need internet access to run this application",
            Toast.LENGTH_SHORT).show();
    a.finish();
    return false;
}

デバイスのwifiがオンになっているかどうかを確認するだけですか?もしそうなら、Wi-Fiだけでなく、インターネットに接続しているかどうかを確認するにはどうすればよいですか

ありがとうございました

4

1 に答える 1

1

最初の質問については、代わりにSocketTimeoutを使用してみてください。

2番目の質問については、行

NetworkInfo netInfo = cm.getActiveNetworkInfo();

Wi-Fi ステータス(つまり、電話の Wi-Fi アンテナがオンになっている) のみを取得しますが、実際の接続は取得しません。関数はすぐに戻るので、wifi がオフになっている場合は、さらに接続を確認せずに乾杯できます。しかし、Wi-Fi がオンになっている場合は、次のような方法で、サーバーの実際の到達可能性を確認する必要があります。

InetAddress.getByName(host).isReachable(timeOut)
于 2012-09-28T09:03:08.290 に答える