1. ホーム
  2. android

[解決済み] Androidでインターネット接続が可能かどうかを検出する【重複】。

2022-03-14 05:17:41

質問

<ブロッククオート

重複の可能性があります。
Androidでインターネット接続を確認するには?InetAddressがタイムアウトしない

Android端末がインターネットに接続されているかどうかを検出したいのですが。

NetworkInfo クラスは、非静的メソッドである isAvailable() というのは完璧な響きです。

問題は、そのことです。

NetworkInfo ni = new NetworkInfo();
if (!ni.isAvailable()) {
    // do something
}

はこのエラーを投げます。

The constructor NetworkInfo is not visible.

を返す別のクラスが存在する可能性があります。 NetworkInfo オブジェクトを作成します。でも、どれがそうなのかわからない。

  1. 上記のスニペットのコードを動作させるにはどうしたらいいですか?
  2. オンラインドキュメントで必要な情報を自分で見つけることができたのはなぜか?
  3. このような検出のためのより良い方法を提案できますか?

解決方法は?

その getActiveNetworkInfo() メソッドの ConnectivityManager が返されます。 NetworkInfo のインスタンスで、最初に見つかった接続されたネットワークインタフェースか null は、どのインターフェースも接続されていない場合。このメソッドが null は、インターネット接続が利用可能かどうかを判断するのに十分である。

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

も必要です。

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

をアンドロイドマニフェストに追加してください。

編集してください。

ネットワークインターフェースが有効であっても、特定のネットワークサービスが利用できることを保証するものではないことに注意してください。ネットワークの問題、サーバーのダウンタイム、低信号、キャプティブポータル、コンテンツフィルターなどはすべて、アプリがサーバーに到達するのを妨げる可能性があります。例えば、アプリがTwitterにアクセスできるかどうかは、Twitterサービスから有効なレスポンスを受け取るまでわかりません。