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() из AsyncTask

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

Ответ 1

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

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();
}

Ответ 2

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

https://github.com/novoda/merlin

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

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

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

example

Создайте 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 в демонстрации показывает простой способ объявить Merlin из вашего основного кода приложения.

Ответ 3

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

 public boolean isInternetOn() {

        // get Connectivity Manager object to check connection
        ConnectivityManager connec =
                (ConnectivityManager) getSystemService(Context.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, которые являются действительными или содержать в разъединяет этом.

Ответ 4

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

 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
        }

Ответ 5

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

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

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

Ответ 6

if (InternetConnection.checkConnection(context)) {
    // Internet Available...
} else {
    // Internet Not Available...
}

просто скопируйте ниже класс

public class InternetConnection {

    /** CHECK WHETHER INTERNET CONNECTION IS AVAILABLE OR NOT */
    public static boolean checkConnection(Context context) {
        final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

        NetworkInfo activeNetworkInfo = connMgr.getActiveNetworkInfo();

        if (activeNetworkInfo != null) { // connected to the internet
            Toast.makeText(context, activeNetworkInfo.getTypeName(), Toast.LENGTH_SHORT).show();

            if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
                // connected to wifi
                return true;
            } else if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
                // connected to the mobile provider data plan
                return true;
            }
        }
        return false;
    }
}

Дайте следующее разрешение на манифест

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

if(isOnline)
{
   MyAsyncTask task=new MyAMyAsyncTask();
   task.execute();

}

else
{
// no internet connection
}