あなたが正しいです。指定したコードは、ネットワーク接続があるかどうかのみをチェックします。アクティブなインターネット接続があるかどうかを確認する最良の方法は、http経由で既知のサーバーに接続してみることです。
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;
}
もちろんhttp://www.google.com
、接続したい他のサーバーの代わりにURLを使用することも、稼働時間が長いことがわかっているサーバーに置き換えることもできます。
Tony Choも以下のこのコメントで指摘しているように、このコードをメインスレッドで実行しないようにしてください。実行しないと、NetworkOnMainThread例外が発生します(Android 3.0以降)。代わりに、AsyncTaskまたはRunnableを使用してください。
google.comを使用したい場合は、エシュルンの変更を確認する必要があります。彼の答えでは、彼は私のコードを変更し、それをもう少し効率的にしました。に接続する場合
HttpURLConnection urlc = (HttpURLConnection)
(new URL("http://clients3.google.com/generate_204")
.openConnection());
次に、204の応答コードを確認します
return (urlc.getResponseCode() == 204 && urlc.getContentLength() == 0);
そうすれば、最初にGoogleホームページ全体を取得する必要はありません。