2016-06-20 17 views
0

デバイスがインターネットに接続されているかどうかを確認するには、次のコード行があります。無線ネットワーク経由でアンドロイドでモバイルネットワークをリクエストする

boolean hasInternet = false; 
HttpURLConnection urlc = null; 
try { 
    urlc = (HttpURLConnection) 
      (new URL("http://clients3.google.com/generate_204") 
      .openConnection()); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
urlc.setRequestProperty("User-Agent", "Android"); 
urlc.setRequestProperty("Connection", "close"); 
urlc.setConnectTimeout(1500); 
urlc.connect(); 
hasInternet = (urlc.getResponseCode() == 204 && 
       urlc.getContentLength() == 0); 

私は無線インターネット接続を使用するとすべてがうまく、hasInternet値がtrueです。しかし、私はモバイルネットワークプロバイダを使用すると、hasInternetの値は常にfalseですが、私は自分のモバイルブラウザで任意のサイトを開くことができます。問題であると想定されるのは?モバイルデバイスで利用可能なisNetworkをチェックするために

+0

あなたのモバイルネットワークは、無線ネットワーク、その後遅くなる可能性がありとのconnecttimeout増やしてみてください。 5秒または10秒に設定してみてください –

+0

@RajenRaiyarela私は10秒のタイムアウトで試しましたが、何も達成されませんでした! – Sina

答えて

0

このメソッドを使用:

public static boolean isNetwork(Context context) { 

     ConnectivityManager cm = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
     if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
      return true; 
     } 
     return false; 
    } 
+1

これは確かに良い解決策ですが、デバイスがWi-Fiに接続されていることがありますが、Wi-Fiルーターにインターネット接続の問題がある場合があります。私は実際に私のプロジェクトのいくつかでこの問題を経験し、それに基づいてコメントしています。 –

+0

私はこれらの行の前にこのコードを持っています。これは私が思うところではありません。私はApacheのhttpclient経由でhttpリクエストを投稿しようとしています。それは同じです。ワイヤレスを使用しても問題はありませんが、モバイルネットワークプロバイダを使用するとリクエストを送信しません。おそらく私のモバイルネットワークプロバイダは何らかのプロキシを使用しているか、何かを禁止しています – Sina

+0

非常に良い点@RajenRaiyarelaはそれについて考えたことはありません、私はあなたのコンセプトを今も使用します。 –

関連する問題