Определите, доступно ли подключение к Интернету и работает ли оно на Android API 15+

Мне нужно определить, доступно ли подключение к Интернету и нормально ли работает в Android. Мне нужно, чтобы эта проверка условия вызывалась до того, как я начну любое из своих действий WebView.

До сих пор мне удалось реализовать функцию isAvailable(), найденную в этом ответе: Класс, который проверяет возможность подключения

Однако описанный выше метод не работает, если Wi-Fi включен, но разъем Ethernet НЕ подключен. Некоторые говорят, что использование ping — хорошая идея. Но я не могу успешно реализовать эту функцию.

  1. Как реализовать функцию ping в коде, указанном в ссылке
  2. Мое приложение для Android использует API-интерфейс Retrofit для отправки и получения содержимого PHP. Может ли Retrofit помочь в проверке подключения к Интернету?
  3. Можете ли вы предложить какой-либо другой простой и легкий в реализации метод проверки подключения к Интернету в режиме реального времени?

Код, который я использовал из этой ссылки: -

  1. Имя класса: AppStatus

      import android.content.Context;
      import android.net.ConnectivityManager;
      import android.net.NetworkInfo;
      import android.util.Log;
      public class AppStatus {
    
      private static AppStatus instance = new AppStatus();
      static Context context;
      ConnectivityManager connectivityManager;
      NetworkInfo wifiInfo, mobileInfo;
      boolean connected = false;
    
      public static AppStatus getInstance(Context ctx) {
              context = ctx.getApplicationContext();
              return instance;
          }
    
          public boolean isOnline() {
    try {
        connectivityManager = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
    
    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
    connected = networkInfo != null && networkInfo.isAvailable() &&
            networkInfo.isConnected();
    return connected;
    
    
    } catch (Exception e) {
        System.out.println("CheckConnectivity Exception: " + e.getMessage());
        Log.v("connectivity", e.toString());
    }
    return connected;
    

    }

  2. Этот код помогает проверить подключение к Интернету, но не работает в ранее упомянутом условии: -

    if (AppStatus.getInstance(this).isOnline()) {
        Toast.makeText(this,"You are online!!!!",8000).show();
    } else {
        Toast.makeText(this,"Internet Connection is required !",8000).show();
        Log.v("Home", "############################You are not online!!!!");
        finish();
    }
    

person Hemang    schedule 20.04.2016    source источник
comment
comment
Кажется, у него есть код PING, который мне нужен. Я попытаюсь интегрировать его с моим кодом и посмотреть.   -  person Hemang    schedule 20.04.2016
comment
Спасибо @camelCaseCoder. Я интегрировал код, который нашел в предоставленной вами ссылке. Я также добавил это в свой ответ.   -  person Hemang    schedule 20.04.2016


Ответы (1)


Благодаря комментарию @camelCaseCoder. У меня есть код, который я успешно реализовал, и я хотел бы поделиться им со всеми вами, и поэтому я отвечаю на свой вопрос.

  1. AppStatus становится (после комментирования предыдущего кода): -

            public class AppStatus {
    
            private static AppStatus instance = new AppStatus();
            static Context context;
            //ConnectivityManager connectivityManager;
            //NetworkInfo wifiInfo, mobileInfo;
            //boolean connected = false;
    
            public static AppStatus getInstance(Context ctx) {
                context = ctx.getApplicationContext();
                return instance;
            }
    
            public boolean isOnline() {
                /*try {
        connectivityManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
    
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
        connected = networkInfo != null && networkInfo.isAvailable() &&
                networkInfo.isConnected();
        return connected;
    
    
    } catch (Exception e) {
        System.out.println("CheckConnectivity Exception: " + e.getMessage());
        Log.v("connectivity", e.toString());
    }
    return connected;
    */
    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;
    

    }

}

  1. Это реализовано так же, как и раньше:-

    //check for internet connectivity by calling isOnline-using Ping @google
    if (AppStatus.getInstance(this).isOnline()) {
        Toast.makeText(this, "You are online!!!!", 8000).show();
    } else {
        Toast.makeText(this,"Internet Connection is required !",8000).show();
        Log.v("Home", "############################You are not online!!!!");
        finish();
    }
    
person Hemang    schedule 20.04.2016