[解決済み] Android端末がインターネットに接続されているかどうかを検出する
2022-04-29 09:25:54
質問
自分の端末がインターネットに接続されているかどうかを確認したいのですが、どうすればいいですか?というような回答が多く見受けられました。
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;
}
(から引用しています。 Androidでインターネット接続が可能かどうかを検出します。 .)
しかし、これは正しいことではありません。例えば、私が インターネットに接続されていない無線ネットワークに接続されている場合 の場合、このメソッドはtrueを返します... 何かに接続しているだけでなく、インターネットに接続しているかどうかを判断する方法はありますか?
解決方法は?
おっしゃるとおりです。あなたが提供したコードは、ネットワーク接続があるかどうかをチェックするだけです。 インターネット接続が有効かどうかを確認する最良の方法は、接続を試みることです。 を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を使いたいなら、Jeshurunの改造を見るべきでしょう。で 回答 彼は私のコードを修正し、少し効率的にしました。に接続すると
HttpURLConnection urlc = (HttpURLConnection)
(new URL("http://clients3.google.com/generate_204")
.openConnection());
そして、レスポンスコードが 204 であることを確認します。
return (urlc.getResponseCode() == 204 && urlc.getContentLength() == 0);
であれば、最初にgoogleのホームページ全体を取得する必要はありません。
関連
-
Gradle のエラーです。gradle-core.jar (com.android.tools.build:gradle-core:x.x.x) を見つけられませんでした。
-
アンドロイドプロジェクトのパッケージングにgradleを使用する際の問題点
-
Android: インポートモジュールエラー Android リソースのリンクに失敗しました
-
Android Get set image.setImageResource(R.drawable.xxx) リソース
-
Androidのカラーグラデーション実装のまとめ
-
アプリの実行エラー。ターゲットデバイスが見つからない問題
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Android端末にADBが接続できない!を解決。理由: デバイスが認証されていない!
-
[解決済み] .NETを使ったインターネット接続の確認方法について教えてください。
-
Android Studio を 3.6.3 にアップデートした後、構成 :classpath のアーティファクトをすべて解決できない。
-
を作ってください。*** makeするルールがない エラーの原因、分析、解決策
-
アンドロイドスタジオのエラーを解決する --> Error:(1, 0) id 'com.android.application' を持つプラグインが見つかりません。
-
Android ProgressBarのスタイルカラーを変更する
-
android bluetooth--Bluetooth on、検索、ペアリング、接続
-
Android TextViewは、テキスト内容が表示省略記号を超えているかどうかを判断する
-
[解決済み] Androidでインターネット接続が可能かどうかを検出する【重複】。
-
[解決済み] Androidでインターネット接続を確認するには?InetAddressがタイムアウトしない