Androidでインターネット接続が利用可能かどうかを検出する [重複] 質問する

Androidでインターネット接続が利用可能かどうかを検出する [重複] 質問する

重複の可能性あり:
Androidでインターネットアクセスを確認するにはどうすればいいですか? InetAddressはタイムアウトしません

Android デバイスがインターネットに接続されているかどうかを検出する必要があります。

このクラスは、完璧に聞こえるNetworkInfo非静的メソッドを提供します。isAvailable()

問題は次の通りです:

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

このエラーが発生します:

The constructor NetworkInfo is not visible.

おそらく、NetworkInfoオブジェクトを返す別のクラスがあるのでしょう。しかし、それがどれかはわかりません。

  1. 上記のコードスニペットを機能させるにはどうすればよいでしょうか?
  2. オンラインドキュメントで必要な情報を見つけるにはどうしたらよいでしょうか?
  3. このタイプの検出のためのより良い方法を提案していただけますか?

ベストアンサー1

メソッドgetActiveNetworkInfo()は、見つかった最初の接続済みネットワーク インターフェイスを表すインスタンスConnectivityManagerを返します。インターフェイスが接続されていない場合は、そのインスタンスを返します。このメソッドが返すかどうかを確認するだけで、インターネット接続が利用可能かどうかがわかります。NetworkInfonullnull

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

以下のものも必要です:

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

Android マニフェストで。

編集:

アクティブなネットワーク インターフェイスがあっても、特定のネットワーク サービスが利用可能であることは保証されません。ネットワークの問題、サーバーのダウンタイム、信号の低下、キャプティブ ポータル、コンテンツ フィルターなどにより、アプリがサーバーにアクセスできなくなる場合があります。たとえば、Twitter サービスから有効な応答を受信するまで、アプリが Twitter にアクセスできるかどうかはわかりません。

おすすめ記事