Android – программно проверьте подключение к Интернету и диалог отображения, если не подключен

Я работаю над живым проектом. И когда пользователь нажимает на приложение. Появится экран приветствия (на этом экране есть веб-просмотр). И если интернет не подключен, приложение отключается. В основном, моя проблема заключается в том, чтобы проверить программно, что мобильный подключен к Интернету или нет. Если нет, то не извлекайте данные из webservice в webview и не показывайте диалоговое окно, показывающее «Проверьте подключение к Интернету»,

Делая исследования, я нашел много вещей, и я попытался реализовать это. Но, не удовлетворяя моему требованию

Мой код,

public boolean isOnline() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = cm.getActiveNetworkInfo(); if (netInfo != null && netInfo.isConnectedOrConnecting()) { return true; } else { Description.setVisibility(View.INVISIBLE); new AlertDialog.Builder(WelcomePage.this) .setTitle(getResources().getString(R.string.app_name)) .setMessage( getResources().getString( R.string.internet_error)) .setPositiveButton("OK", null).show(); } return false; } 

Я doInBackground() эту функцию в doInBackground() AsyncTask

Пожалуйста помоги!

    Вы можете проверить эту библиотеку:

    https://github.com/novoda/merlin

    Вы просто implement Connectable и вы получите обратный вызов, когда сеть опустится или появится.

    Поэтому вы можете показать свое диалоговое окно в этом сценарии.

    Вы также можете запросить библиотеку для текущего состояния и не выполнять сетевую задачу

    пример

    Создайте Merlin (используя Merlin.Builder ())

     merlin = new Merlin.Builder().withConnectableCallbacks().build(context); 

    Свяжите и отвяжите службу в своей деятельности

     @Override protected void onResume() { super.onResume(); merlin.bind(); } @Override protected void onPause() { super.onPause(); merlin.unbind(); } 

    Регистрация для обратных вызовов

     merlin.registerConnectable(new Connectable() { @Override public void onConnect() { // Do something! } }); 

    MerlinActivity в демонстрации показывает простой способ declutter Merlin из вашего основного кода приложения.

    Наконец, я получил ответ.

     ConnectivityManager conMgr = ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = conMgr.getActiveNetworkInfo(); if (netInfo == null){ Description.setVisibility(View.INVISIBLE); new AlertDialog.Builder(WelcomePage.this) .setTitle(getResources().getString(R.string.app_name)) .setMessage(getResources().getString(R.string.internet_error)) .setPositiveButton("OK", null).show(); }else{ dialog = ProgressDialog.show(WelcomePage.this, "", "Loading...", true,false); new Welcome_Page().execute(); } 

    Это простая функция, которая проверяет ваше интернет-соединение. Если Connected возвращает true, в противном случае false.

      public boolean isInternetOn() { // get Connectivity Manager object to check connection ConnectivityManager connec = (ConnectivityManager) getSystemService(getBaseContext().CONNECTIVITY_SERVICE); // Check for network connections if (connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTED || connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTING || connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTING || connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTED) { return true; } else if ( connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.DISCONNECTED || connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.DISCONNECTED) { return false; } return false; } } 

    Вот проект, который проверяет подключение к Интернету, а также проверяет URL-адрес, который действителен или содержится в этом разделе.

    doInBackground запускается в другом doInBackground чем основной пользовательский интерфейс, поэтому вы не можете создать диалоговое окно для показа. Вместо этого переопределите onPreExecute в вашей AsyncTask и выполните там тест.

    Я пробовал разные методы, описанные выше, кроме того, я был пойман в некоторых случаях. Итак, наконец, я использую ниже фрагмент кода для создания сетевого вызова …

     try { InetAddress address = InetAddress.getByName("www.stackoverflow.com"); //Connected to working internet connection } catch (UnknownHostException e) { e.printStackTrace(); //Internet not available } 

    Это может быть полезно во многих аспектах. Если что-то не так хорошо в этом подходе, пожалуйста, дайте мне знать.

    Проверьте подключение к Интернету

      ConnectivityManager mgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = mgr.getActiveNetworkInfo(); if (netInfo != null) { if (netInfo.isConnected()) { // Internet Available }else { //No internet } } else { //No internet } 

    Интернет-соединение также проверяет либо в onCreate() либо onResume() . Внутри AsyncTask нет необходимости звонить.

    Или Вы можете позвонить перед вызовом метода execute () AsyncTask

     if(isOnline) { MyAsyncTask task=new MyAMyAsyncTask(); task.execute(); } else { // no internet connection }