4

このコードを使用して、インターネットが利用可能かどうかを確認しました..

    ConnectivityManager connectivity = (ConnectivityManager) _context
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    if (connectivity != null) {

        NetworkInfo[] info = connectivity.getAllNetworkInfo();
        if (info != null)
            for (int i = 0; i < info.length; i++)

    if (info[i].getState() == NetworkInfo.State.CONNECTED && info[i].isAvailable())

        {
            return true;
        }
    }
    return false;

しかし、私が欲しいのは:

wifiが接続されているが、wifiにインターネットがないと仮定します... Wifiが接続されているにもかかわらず、インターネットデータがwifiで利用可能であることを確認する方法..上記のコードを使用すると、wifiが接続されているか切断されているかを確認するだけです..私に解決策...

4

6 に答える 6

3

最も簡単な方法は、httpリクエストを送信することです。httpリクエストがタイムアウトした場合は、インターネットに接続していないか、さらに応答コードを確認できます。あなたが言及した状態は、WiFiに接続しているが、WiFiルーターがISPにアクティブに接続していない場合に発生します。最良の方法は、httprequestimoに依存することです。

コード例は次のとおりです。

try
  {

   HttpGet request = new HttpGet(url));
   HttpParams httpParameters = new BasicHttpParams();
   // Set the timeout in milliseconds until a connection is established.
   // The default value is zero, that means the timeout is not used. 
   int timeoutConnection = 60000;
   HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
   // Set the default socket timeout (SO_TIMEOUT) 
   // in milliseconds which is the timeout for waiting for data.
   int timeoutSocket = 60000;
   HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
   // create object of DefaultHttpClient    
   DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
   request.addHeader("Content-Type", "application/json");
   HttpResponse response = httpClient.execute(request);
   // get response entity
   HttpEntity entity = response.getEntity();
   // convert entity response to string

     if (entity != null)
      {
         result = EntityUtils.toString(entity);
      }

   }
 catch (SocketException e)
  {
     return "-222" + e.toString();
  }
 catch (Exception e)
  {
     return "-333" + e.toString();
  }
于 2013-01-22T06:22:27.410 に答える
1

Play Store https://play.google.com/store/apps/details?id=com.mobilefreeの最新タイトル「Mobile Free」でこれを実行しました

NetworkInfo.isAvailable() は、接続可能な物理ネットワークがあるかどうかを通知するだけです。NetworkInfo.isConnected() は、物理ネットワークに接続していることを通知するだけです。

物理ネットワークには、WIFI、MOBILE、ETHER などがあります。トランスポート層です。

ネットワークに接続しているからといって、ネットワークにインターネット (アプリケーション層) があるとは限りません。

ネットワークには、あらゆる種類のアプリケーション プロトコルを含めることができます。TCP、DNS、HTTP だけではありません。

実際のインターネットの可用性を確認することは、Android では実際には非常に困難です。そのためには、克服しなければならない多くの制約があります。

isReachable() メソッドは、ICMP を使用してホストに ping を送信します。それを設定するのは難しい場合があります。

同様に、デバイス、権限、API、OS バージョンなどに応じて、URL の呼び出しも同様に制限される可能性があります。

やる必要がないならやらない。すべてのデバイスで機能する堅牢な方法はありません。

これは、モバイル課金 (オン/オフ) を管理するだけの「モバイル フリー」のコア ユース ケースではありませんでした。

興味深いことに、実際にはモバイルに接続できますが、インターネットがなくても請求可能です.

于 2014-01-27T02:38:16.717 に答える
1

はい、VendettaDroid は正しいです。

また、WIFIインターネットをチェックし、フライトモードがオン/オフであることを確認するコードもあります。Webアプリケーションを作成している場合は、フライトモードを処理する必要があります

// Check Flight mode ON/OFF
    if (Settings.System.getInt(context.getContentResolver(),
            Settings.System.AIRPLANE_MODE_ON, 0) == 0) {

// Flight mode ON not able to access internet
}

Wi-Fi とインターネットの可用性を確認する

ConnectivityManager cm;
cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm.getActiveNetworkInfo() != null
                && cm.getActiveNetworkInfo().isAvailable()
                && cm.getActiveNetworkInfo().isConnected()) {

 // Internet is availble.
}
于 2013-01-22T08:11:50.043 に答える
0

私に提案してくれてどうもありがとう...

私は実際にいくつかの解決策を見つけました:

私はtry \ catchを使用しました:

    try{
    //calling url
    }
    catch(UnknownHostException e){

    e.printStackTrace();

    Connection_error();     
    }

   catch (ConnectException e) {
    e.printStackTrace();
    Connection_error();
            }

ありがとうございます...

于 2013-01-22T09:35:25.970 に答える
-1

以下のコードを試してください:-

public static boolean netConnect(Context ctx) {

    ConnectivityManager cm;
    NetworkInfo info = null;
    try {
        cm = (ConnectivityManager) ctx
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        info = cm.getActiveNetworkInfo();
    } catch (Exception e) {

        e.printStackTrace();
    }
    if (info != null) {
        return true;

    } else {
        return false;
    }
}
于 2013-01-22T07:05:55.993 に答える