2012-11-04 18 views
6

私はプログラムを作っています。インターネットに接続するにはwifiを使用しなければなりません。私は無線LANが接続されているかどうかを確認するためにいくつかの情報を見つける。しかし、状況によってはWi-Fi APに接続できますが、Wi-Fiに必要なアカウントとパスワードのようなインターネットをhttpsの証明書に使用できない場合、またはWi-Fi APがインターネットに接続できない場合があります。だから、実際のインターネット接続をどうすれば確認できますか?アンドロイドで接続されている実際のインターネットをチェックする方法は?

答えて

5

www.google.comへの「Ping」を行うだけで、ダウンしている可能性は非常に低いです。

P.S.デバイスが機内モードまたは接続モードでは使用できていないネットワーク内にない場合には、以下の方法によれば..我々は我々のアプリで仕事だ

public static boolean isReachable(Context context) { 
    // First, check we have connectivity 
    final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    final NetworkInfo netInfo = connMgr.getActiveNetworkInfo(); 

    if (netInfo != null && netInfo.isConnected()) { 
     // check if google is reachable 
     try { 
      URL url = new URL("http://www.google.com"); 
      HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); 
      urlc.setRequestProperty("Connection", "close"); 
      urlc.setConnectTimeout(10 * 1000); // Ten seconds timeout in milliseconds 
      urlc.connect(); 
      if (urlc.getResponseCode() == 200) { // success 
       return true; 
      } else { // Fail 
       return false; 
      } 
     } catch (IOException e) { 
      Log.e(TAG, e.getMessage()); 
      return false; 
     } 
    } else { 
     return false; 
    } 
} 
+0

私はpingが良い方法だと思いますが、android4.0では、このメソッドは新しいスレッドを実装する必要があります。新しいスレッドがなければ他の方法がありますか? –

+0

あなたのアプリケーションの応答性を確保するために、ネットワークのものは別のスレッド(メインスレッドではない)で行うべきです。 – Frank

+0

mm、ok、そこには実際のインターネット –

1

、この方法では、そうでない場合は真falseを返します。上記のシナリオが満たされれば、nullを返すことを念頭に置いてください。そのため、nullのnetInfoオブジェクトをチェックすることによって処理されます。

public boolean isOnline() { 
ConnectivityManager conManager = 
    (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo netInfo = conManager .getActiveNetworkInfo(); 
if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
    return true; 
} 
return false; 

}

マニフェストにネットワークの状態にアクセスする権限を取得することを忘れないでください。

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

下記をご参照ください:

ConnectivityManager connectivityManager; 
    NetworkInfo wifiInfo, mobileInfo; 

    public Boolean checkNow(Context con){ 
    try{ 
     connectivityManager = (ConnectivityManager) con.getSystemService(Context.CONNECTIVITY_SERVICE); 
     wifiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
     mobileInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

     if(wifiInfo.isConnected() || mobileInfo.isConnected()) 
     { 
      return true; 
     } 
    } 
    catch(Exception e){ 
     System.out.println("CheckConnectivity Exception: " + e.getMessage()); 
    } 

    return false; 
} 

は、以下のようなあなたのonCreate()方法で上記の方法を使用します:

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     boolean con = checkNow(getApplicationContext()); 

     if(con){ 
      Toast.makeText(getApplicationContext(), "Connection Founded", Toast.LENGTH_SHORT).show(); 
     }else{ 
      Toast.makeText(getApplicationContext(), "Connection Not Founded", Toast.LENGTH_SHORT).show(); 
     } 

} 

あなたを

はブール値を返すメソッドを作成しますあなたは、インターネット接続avaの場合は"Connection Founded"としてプロンプトが表示されますアプリを実行するそれ以外の場合は"Connection Not Founded"と表示されます。

関連する問題