Как проверить доступ в Интернет на Android? InetAddress никогда не истекает

У меня есть AsyncTask который должен проверять сетевой доступ к имени хоста. Но doInBackground() никогда не doInBackground() . Кто-нибудь знает?

 public class HostAvailabilityTask extends AsyncTask<String, Void, Boolean> { private Main main; public HostAvailabilityTask(Main main) { this.main = main; } protected Boolean doInBackground(String... params) { Main.Log("doInBackground() isHostAvailable():"+params[0]); try { return InetAddress.getByName(params[0]).isReachable(30); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return false; } protected void onPostExecute(Boolean... result) { Main.Log("onPostExecute()"); if(result[0] == false) { main.setContentView(R.layout.splash); return; } main.continueAfterHostCheck(); } } 

Solutions Collecting From Web of "Как проверить доступ в Интернет на Android? InetAddress никогда не истекает"

@Эдди. Просто небольшое редактирование вашего решения – если устройство находится в режиме полета (или, предположительно, в других ситуациях, когда нет доступной сети), cm.getActiveNetworkInfo() будет null , поэтому вам нужно добавить null проверку.

Модифицированное решение ниже:

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

Также добавьте следующие разрешения для AndroidManifest.xml :

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

Еще одна небольшая точка, если вам абсолютно необходимо подключение к сети в данный момент времени, тогда было бы лучше использовать netInfo.isConnected() а не netInfo.isConnectedOrConnecting . Я предполагаю, что это зависит от индивидуального варианта использования.

Не нужно быть сложным. Самый простой и каркасный способ – использовать разрешение ACCESS_NETWORK_STATE и просто сделать подключенный метод

 public boolean isOnline() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); return cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnectedOrConnecting(); } 

Вы также можете использовать requestRouteToHost если у вас есть конкретный хост и тип подключения (wifi / mobile).

Вам также понадобятся:

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

В вашем манифестах Android.

HTTP Checks, Ping или isConnectedOrConnecting() ?

  • Большинство ответов здесь, используя проверку isConnectedOrConnecting для любого сетевого подключения
  • Если это все, что вам нужно, используйте это, но если вы хотите узнать о доступе к Интернету , …

A. Ping a Server (простой)

 // ICMP public boolean isOnline() { Runtime runtime = Runtime.getRuntime(); try { Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8"); int exitValue = ipProcess.waitFor(); return (exitValue == 0); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } return false; } 

+ Может работать на главной теме

- не работает на некоторых старых устройствах (см. Комментарии), только быстро с подключением к Интернету

B. или Подключиться к порту (расширенный)

 // TCP/HTTP/DNS (depending on the port, 53=DNS, 80=HTTP, etc.) public boolean isOnline() { try { int timeoutMs = 1500; Socket sock = new Socket(); SocketAddress sockaddr = new InetSocketAddress("8.8.8.8", 53); sock.connect(sockaddr, timeoutMs); sock.close(); return true; } catch (IOException e) { return false; } } 

+ Очень быстрый (в любом случае), работает на всех устройствах, очень надежен

- не может работать по задаче ui

Это работает практически повсеместно и очень быстро, но ему нужно выполнить отдельную задачу (например, ScheduledExecutorService или AsyncTask ). Это работает очень хорошо, для меня. Рекомендовать его!

Возможные вопросы

  • Это действительно достаточно быстро?

    Да, очень быстро 😉

  • Нет ли надежного способа проверки Интернета, кроме тестирования чего-либо в Интернете?

    Насколько я знаю, но дайте мне знать, и я отредактирую свой ответ.

  • Что делать, если DNS не работает?

    Google DNS (например, 8.8.8.8 ) является крупнейшим публичным DNS в мире. С 2013 года он обслуживает 130 миллиардов запросов в день. Скажем так, ваше приложение, вероятно, не будет говорить о дне.

  • Какие разрешения необходимы?

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

    Просто интернет-доступ – неожиданность ^^ (Кстати, вы когда-нибудь задумывались о том, как некоторые из предложенных здесь методов могут даже иметь удаленный клей об интернет-доступе без этого разрешения?)

Чтобы получить getActiveNetworkInfo() для работы, вам нужно добавить в манифест следующее.

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

Проверьте этот код … это сработало для меня 🙂

 public static void isNetworkAvailable(final Handler handler, final int timeout) { // ask fo message '0' (not connected) or '1' (connected) on 'handler' // the answer must be send before before within the 'timeout' (in milliseconds) new Thread() { private boolean responded = false; @Override public void run() { // set 'responded' to TRUE if is able to connect with google mobile (responds fast) new Thread() { @Override public void run() { HttpGet requestForTest = new HttpGet("http://m.google.com"); try { new DefaultHttpClient().execute(requestForTest); // can last... responded = true; } catch (Exception e) { } } }.start(); try { int waited = 0; while(!responded && (waited < timeout)) { sleep(100); if(!responded ) { waited += 100; } } } catch(InterruptedException e) {} // do nothing finally { if (!responded) { handler.sendEmptyMessage(0); } else { handler.sendEmptyMessage(1); } } } }.start(); } 

Затем я определяю обработчик:

 Handler h = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what != 1) { // code if not connected } else { // code if connected } } }; 

… и запустить тест:

 isNetworkAvailable(h,2000); // get the answser within 2000 ms 

Взгляните на класс ConnectivityManager. Вы можете использовать этот класс для получения информации о активных соединениях на хосте. http://developer.android.com/reference/android/net/ConnectivityManager.html

EDIT: вы можете использовать

 Context.getSystemService(Context.CONNECTIVITY_SERVICE) .getNetworkInfo(ConnectivityManager.TYPE_MOBILE) 

или

 Context.getSystemService(Context.CONNECTIVITY_SERVICE) .getNetworkInfo(ConnectivityManager.TYPE_WIFI) 

И проанализируйте перечисление DetailedState возвращаемого объекта NetworkInfo

EDIT EDIT: чтобы узнать, можете ли вы получить доступ к хосту, вы можете использовать

 Context.getSystemService(Context.CONNECTIVITY_SERVICE) .requestRouteToHost(TYPE_WIFI, int hostAddress) 

Очевидно, я использую Context.getSystemService (Context.CONNECTIVITY_SERVICE) в качестве прокси, чтобы сказать

 ConnectivityManager cm = Context.getSystemService(Context.CONNECTIVITY_SERVICE); cm.yourMethodCallHere(); 

Найден и изменен (!) По этой ссылке :

В файле манифеста добавьте хотя бы:

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

Возможно, у вас уже есть разрешение INTERNET, если вы обращаетесь к нему. Тогда логическая функция, позволяющая проверить возможность подключения:

 private boolean checkInternetConnection() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); // test for connection if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable() && cm.getActiveNetworkInfo().isConnected()) { return true; } else { Log.v(TAG, "Internet Connection Not Present"); return false; } } 

Я сделал этот код, он самый простой, и он просто логический. if(isOnline()){ вопрос if(isOnline()){

Вы получаете, если есть соединение, и если он может подключиться к странице, код состояния 200 (стабильное соединение).

Обязательно добавьте правильные разрешения INTERNET и ACCESS_NETWORK_STATE .

 public boolean isOnline() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = cm.getActiveNetworkInfo(); if (netInfo != null && netInfo.isConnected()) { try { URL url = new URL("http://www.google.com"); HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); urlc.setConnectTimeout(3000); urlc.connect(); if (urlc.getResponseCode() == 200) { return new Boolean(true); } } catch (MalformedURLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return false; } 

Это работает для меня:

Чтобы проверить доступность сети:

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

Чтобы проверить доступ в Интернет:

 public Boolean isOnline() { try { Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com"); int returnVal = p1.waitFor(); boolean reachable = (returnVal==0); return reachable; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } 

Из всего, что я видел до сих пор, самым коротким и чистым способом должно быть:

 public final static boolean isConnected( Context context ) { final ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService( Context.CONNECTIVITY_SERVICE ); final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); return networkInfo != null && networkInfo.isConnected(); } 

PS: Это не проверяет какой-либо хост, он просто проверяет состояние соединения, поэтому, если ваш маршрутизатор не подключен к Интернету, и ваше устройство подключено к нему, этот метод будет возвращать true, хотя у вас нет интернета.
Для фактического теста я бы рекомендовал выполнить запрос HttpHead (например, на http://www.google.com) и проверить статус, если его 200 OK все в порядке, и ваше устройство имеет подключение к Интернету.

Одним из важных вариантов использования мобильных устройств для этого является фактическое соединение. Это обычная проблема, когда мобильный пользователь входит в сеть Wi-Fi с «Captive Portal», в котором им необходимо войти. Я использую эту функцию блокировки в фоновом режиме, чтобы обеспечить соединение.

 /* * Not Thread safe. Blocking thread. Returns true if it * can connect to URL, false and exception is logged. */ public boolean checkConnectionHttps(String url){ boolean responded = false; HttpGet requestTest = new HttpGet(url); HttpParams params = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(params, 3000); HttpConnectionParams.setSoTimeout(params, 5000); DefaultHttpClient client = new DefaultHttpClient(params); try { client.execute(requestTest); responded = true; } catch (ClientProtocolException e) { Log.w(MainActivity.TAG,"Unable to connect to " + url + " " + e.toString()); } catch (IOException e) { Log.w(MainActivity.TAG,"Unable to connect to " + url + " " + e.toString()); e.printStackTrace(); } return responded; } 

Вы можете выполнять итерацию по всем сетевым соединениям и проверять, есть ли хотя бы одно доступное соединение:

 public boolean isConnected() { boolean connected = false; ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); if (cm != null) { NetworkInfo[] netInfo = cm.getAllNetworkInfo(); for (NetworkInfo ni : netInfo) { if ((ni.getTypeName().equalsIgnoreCase("WIFI") || ni.getTypeName().equalsIgnoreCase("MOBILE")) && ni.isConnected() && ni.isAvailable()) { connected = true; } } } return connected; } 

Для меня не было хорошей проверкой состояния подключения в классе Activity, потому что

 ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 

Следует вызвать там, или вам нужно нажать экземпляр Activity (контекст) на класс обработчика соединения, чтобы проверить состояние соединения там. Когда нет доступного соединения (wifi, network), я поймаю исключение UnknownHostException :

 JSONObject jObj = null; Boolean responded = false; HttpGet requestForTest = new HttpGet("http://myserver.com"); try { new DefaultHttpClient().execute(requestForTest); responded = true; } catch (UnknownHostException e) { jObj = new JSONObject(); try { jObj.put("answer_code", 1); jObj.put("answer_text", "No available connection"); } catch (Exception e1) {} return jObj; } catch (IOException e) { e.printStackTrace(); } 

Таким образом, я могу справиться с этим случаем вместе с другими случаями в одном классе (мой сервер всегда возвращает ответ с помощью строки json)

Это работает для меня. Попробуйте.

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); try { URL url = new URL("http://stackoverflow.com/posts/11642475/edit" ); //URL url = new URL("http://www.nofoundwebsite.com/" ); executeReq(url); Toast.makeText(getApplicationContext(), "Webpage is available!", Toast.LENGTH_SHORT).show(); } catch(Exception e) { Toast.makeText(getApplicationContext(), "oops! webpage is not available!", Toast.LENGTH_SHORT).show(); } } private void executeReq(URL urlObject) throws IOException { HttpURLConnection conn = null; conn = (HttpURLConnection) urlObject.openConnection(); conn.setReadTimeout(30000);//milliseconds conn.setConnectTimeout(3500);//milliseconds conn.setRequestMethod("GET"); conn.setDoInput(true); // Start connect conn.connect(); InputStream response =conn.getInputStream(); Log.d("Response:", response.toString()); }} 

Вот метод, который я использую:

 public boolean isNetworkAvailable(final Context context) { return ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo() != null; } 

Еще лучше, убедитесь, что он «подключен»:

 public boolean isNetworkAvailable(final Context context) { final ConnectivityManager connectivityManager = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)); return connectivityManager.getActiveNetworkInfo() != null && connectivityManager.getActiveNetworkInfo().isConnected(); } 

Вот как использовать метод:

 if (isNetworkAvailable(context)) { // code here } else { // code } 

Необходимое разрешение:

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

https://stackoverflow.com/a/16124915/950427

Я использую этот код вместо InetAddress:

  try { URL url = new URL("http://"+params[0]); HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); urlc.setRequestProperty("User-Agent", "Android Application:"+Z.APP_VERSION); urlc.setRequestProperty("Connection", "close"); urlc.setConnectTimeout(1000 * 30); // mTimeout is in seconds urlc.connect(); if (urlc.getResponseCode() == 200) { Main.Log("getResponseCode == 200"); return new Boolean(true); } } catch (MalformedURLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

Не сложно проверить статус сети Android / интернет-соединения. DetectConnection класс DetectConnection поможет вам проверить этот статус:

 import android.content.Context; import android.net.ConnectivityManager; public class DetectConnection { public static boolean checkInternetConnection(Context context) { ConnectivityManager con_manager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); if (con_manager.getActiveNetworkInfo() != null && con_manager.getActiveNetworkInfo().isAvailable() && con_manager.getActiveNetworkInfo().isConnected()) { return true; } else { return false; } } } 

Дополнительные сведения см. В разделе « Как проверить статус сети Android / Интернет»

Лучший подход:

 public static boolean isOnline() { try { InetAddress.getByName("google.com").isReachable(3); return true; } catch (UnknownHostException e){ return false; } catch (IOException e){ return false; } } 

Ниже приведен код из моего класса Utils :

 public static boolean isNetworkAvailable(Context context) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); return activeNetworkInfo != null && activeNetworkInfo.isConnected(); } 
 public class Network { Context context; public Network(Context context){ this.context = context; } public boolean isOnline() { ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); return activeNetwork != null && activeNetwork.isConnectedOrConnecting(); } } 

Этот метод можно использовать для определения доступности сети,

 public static boolean isDeviceOnline(Context context) { boolean isConnectionAvail = false; try { ConnectivityManager cm = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = cm.getActiveNetworkInfo(); return netInfo.isConnected(); } catch (Exception e) { e.printStackTrace(); } return isConnectionAvail; } 

Другие ответы, которые используют ConnectivityManager, неверны, потому что наличие сетевого подключения не означает, что у вас есть доступ в Интернет. Например, пользователь может подключиться к порталу WiFi в кафе, но не может попасть в Интернет. Чтобы проверить доступ в Интернет, вам нужно попытаться подключиться к реальному серверу. Обычно, когда вы хотите это сделать, у вас есть определенный сервер, с которым вы хотите подключиться, поэтому продолжайте и проверьте, можете ли вы подключиться к этому серверу. Вот простой способ проверки подключения к серверу.

 private boolean isOnTheInternet() { try { URLConnection urlConnection = new URL("http://yourserver").openConnection(); urlConnection.setConnectTimeout(400); urlConnection.connect(); return true; } catch (Exception e) { return false; } } 

Причина установки ConnectTimeout заключается в том, что в противном случае по умолчанию используется таймаут TCP, который может длиться много секунд.

Обратите внимание также, что Android не позволит вам запускать это в своем основном потоке.

Этот метод дает вам возможность для очень быстрого метода (для обратной связи в режиме реального времени) или более медленного метода (для однократных проверок, требующих надежности)

 public boolean isNetworkAvailable(bool SlowButMoreReliable) { bool Result = false; try { if(SlowButMoreReliable){ ConnectivityManager MyConnectivityManager = null; MyConnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo MyNetworkInfo = null; MyNetworkInfo = MyConnectivityManager.getActiveNetworkInfo(); Result = MyNetworkInfo != null && MyNetworkInfo.isConnected(); } else { Runtime runtime = Runtime.getRuntime(); Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8"); int i = ipProcess.waitFor(); Result = i== 0; } } catch(Exception ex) { //Common.Exception(ex); //This method is one you should have that displays exceptions in your log } return Result; } 

Это описано в андроидных документах http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html

Я применил решение, предоставленное @Levit, и создал функцию, которая не будет вызывать дополнительный запрос Http.

Он разрешит ошибку, Unable to Resolve Host разрешить Unable to Resolve Host

 public static boolean isInternetAvailable(Context context) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); if (activeNetwork == null) return false; switch (activeNetwork.getType()) { case ConnectivityManager.TYPE_WIFI: if ((activeNetwork.getState() == NetworkInfo.State.CONNECTED || activeNetwork.getState() == NetworkInfo.State.CONNECTING) && isInternet()) return true; break; case ConnectivityManager.TYPE_MOBILE: if ((activeNetwork.getState() == NetworkInfo.State.CONNECTED || activeNetwork.getState() == NetworkInfo.State.CONNECTING) && isInternet()) return true; break; default: return false; } return false; } private static boolean isInternet() { Runtime runtime = Runtime.getRuntime(); try { Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8"); int exitValue = ipProcess.waitFor(); Debug.i(exitValue + ""); return (exitValue == 0); } catch (IOException | InterruptedException e) { e.printStackTrace(); } return false; } 

Теперь назовите это,

 if (!isInternetAvailable(getActivity())) { //Show message } else { //Perfoem the api request } 

Просто создайте следующий класс, который проверяет подключение к Интернету:

 public class ConnectionStatus { private Context _context; public ConnectionStatus(Context context) { this._context = context; } public boolean isConnectionAvailable() { 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) { return true; } } return false; } } 

Этот класс просто содержит метод, который возвращает логическое значение состояния соединения. Поэтому в простых терминах, если метод находит правильное соединение с Интернетом, возвращаемое значение имеет значение true , иначе false если не найдено никакого действительного соединения.

Следующий метод в MainActivity затем вызывает результат из ранее описанного метода и предлагает пользователю действовать соответственно:

 public void addListenerOnWifiButton() { Button btnWifi = (Button)findViewById(R.id.btnWifi); iia = new ConnectionStatus(getApplicationContext()); isConnected = iia.isConnectionAvailable(); if (!isConnected) { btnWifi.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); Toast.makeText(getBaseContext(), "Please connect to a hotspot", Toast.LENGTH_SHORT).show(); } }); } else { btnWifi.setVisibility(4); warning.setText("This app may use your mobile data to update events and get their details."); } } 

In the above code, if the result is false, (therefore there is no internet connection, the user is taken to the Android wi-fi panel, where he is prompted to connect to a wi-fi hotspot.

Update 29/06/2015 If you are using Xamarin.Android and want to check for connectivity, you can use a Nuget package that would give you this functionality on multiple platforms. Good candidates are here and here . [End of Update]

The Answers above are quite good, but they are all in Java, and almost all of them check for a connectivity. In my case, I needed to have connectivity with a specific type of connection and I am developing on Xamarin.Android. Moreover, I do not pass a reference to my activities Context in the Hardware layer, I use the Application Context. So here is my solution, in case somebody comes here with similar requirements. I have not done full testing though, will update the answer once I am done with my testing

 using Android.App; using Android.Content; using Android.Net; namespace Leopard.Mobile.Hal.Android { public class AndroidNetworkHelper { public static AndroidNetworkStatus GetWifiConnectivityStatus() { return GetConnectivityStatus(ConnectivityType.Wifi); } public static AndroidNetworkStatus GetMobileConnectivityStatus() { return GetConnectivityStatus(ConnectivityType.Mobile); } #region Implementation private static AndroidNetworkStatus GetConnectivityStatus(ConnectivityType connectivityType) { var connectivityManager = (ConnectivityManager)Application.Context.GetSystemService(Context.ConnectivityService); var wifiNetworkInfo = connectivityManager.GetNetworkInfo(connectivityType); var result = GetNetworkStatus(wifiNetworkInfo); return result; } private static AndroidNetworkStatus GetNetworkStatus(NetworkInfo wifiNetworkInfo) { var result = AndroidNetworkStatus.Unknown; if (wifiNetworkInfo != null) { if (wifiNetworkInfo.IsAvailable && wifiNetworkInfo.IsConnected) { result = AndroidNetworkStatus.Connected; } else { result = AndroidNetworkStatus.Disconnected; } } return result; } #endregion } public enum AndroidNetworkStatus { Connected, Disconnected, Unknown } 
 public boolean isOnline() { boolean var = false; ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); if ( cm.getActiveNetworkInfo() != null ) { var = true; } return var; } 

I have done it this way. A little bit shorter and more readable I guess.

Ура!

Saiyan

 public static boolean isNetworkAvailable(Context ctx) { ConnectivityManager connMgr = (ConnectivityManager)ctx.getSystemService(Context.CONNECTIVITY_SERVICE); if(connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected() || connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected()){ return true; } return false; } 

user this

Its so great to have more then one way to code. Вот мой пример.

 ConnectivityManager icheck = getSystemService(Context.CONNECTIVITY_SERVICE); TextView tv = findViewById(R.id.textView1); boolean wifi = icheck.getActiveNetworkInfo() != null; if(wifi) { tv.setText("Internet is on."); } else { tv.setText("Internet is off."); } 

Удачи.