Проверка интернет-соединения в Android

Есть ли какая-либо фоновая задача, которая запускается в приложении для проверки подключения к Интернету для описанных ниже сценариев как обычно?

1.Начало парсинга/выборки данных с сервера

2. Между парсингом/выборкой с сервера

Любой пример кода или ссылки мне очень помогают.


person Manju    schedule 16.01.2013    source источник
comment
да, что лучше всего подходит для службы или может быть получателем, у меня есть код, который будет работать только для первого сценария   -  person Manju    schedule 16.01.2013


Ответы (3)


Вы можете запустить IntentService или Service и использовать это:

public boolean CheckInternet() 
    {
        ConnectivityManager connec = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        android.net.NetworkInfo wifi = connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        android.net.NetworkInfo mobile = connec.getNetworkInfo(ConnectivityManager.

        if (wifi.isConnected()) {
            return true;
        } else if (mobile.isConnected()) {
            return true;
        }
        return false;
    }

Также не забудьте добавить это разрешение в файл AndroidManifest:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
person Rob    schedule 16.01.2013
comment
спасибо за ответ, это будет работать для первого сценария, пожалуйста, предложите мне, если у вас есть какие-либо идеи, которые будут работать для обоих сценариев, заранее спасибо - person Manju; 16.01.2013
comment
просто вызывайте этот метод всякий раз, когда вам это нужно. Если вам нужно проверить это из нескольких классов, вы можете просто реорганизовать этот код в пользовательский UtilClass как статический метод. Перед первым обращением к серверу -> MyUtils.CheckInternet(). После парсинга данных + перед следующим обращением к серверу -> MyUtils.CheckInternet() и т.д... - person Rob; 16.01.2013

Вы можете использовать сервис для обеих задач.

  • для первого вызовите службу, когда начнется загрузка.

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

Изменить-

Это может быть что-то вроде,

Thread thread = new Thread()
{
      @Override
      public void run() {
          try {
              while(true) {
                  sleep(1000);
                  Toast.makeText(getBaseContext(), "Running Thread...", Toast.LENGTH_LONG).show();
                  // Check internet connectivity here
              }
          } catch (InterruptedException e) {
           Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show();
          }
      }
  };

thread.start();

Взгляните также на этот сообщение.

Также я нашел два других варианта,

Взгляните на Timer Task и Alarm Manager, чтобы через некоторое время проверить интернет-соединение.

person Sahil Mahajan Mj    schedule 16.01.2013
comment
спасибо за ответ, но я не уверен, что делать с нитью, можете ли вы помочь мне с некоторыми ссылками или кодом, если это возможно - person Manju; 16.01.2013
comment
спасибо за ваш быстрый ответ, у меня есть одно сомнение, я напишу службу, я размещу метод в том, который проверяет подключение к Интернету, я думаю, что служба будет работать в фоновом режиме, если вызвать службу перед началом загрузки, почему я должен снова написать эту логику потока как службу будет всегда работать в фоновом режиме каким-то образом невозможно сделать оба в одном устройстве извините, если вопрос, который я задал, был неправильным - person Manju; 16.01.2013
comment
@ Sahil Mahajan Mj, пожалуйста, проверьте ссылку stackoverflow.com/questions/5738419/, которое будет запускаться в первый раз приложения, возможно, вы поймете, что это должно работать для всего приложения. - person Manju; 16.01.2013
comment
Я просто подумал еще об одном варианте. Асинхронная задача. Посмотри на это. Запустите асинхронный режим, когда начнется загрузка, и он будет работать только во время загрузки. Я думаю, что это лучший вариант из всех. - person Sahil Mahajan Mj; 16.01.2013

Вы можете использовать приведенный ниже служебный класс, обязательно предоставив разрешение на доступ в Интернет в манифесте.

Let me know if any issues.

private static NetworkUtil mInstance;
private volatile boolean mIsOnline;

private NetworkUtil() {
    ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
    exec.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            boolean reachable = false;
            try {
                Process process = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com");
                int returnVal = process.waitFor();
                reachable = (returnVal==0);
            } catch (Exception e) {
                e.printStackTrace();
            }
            mIsOnline = reachable;
        }
    }, 0, 5, TimeUnit.SECONDS);
}

public static NetworkUtil getInstance() {
    if (mInstance == null) {
        synchronized (NetworkUtil.class) {
            if (mInstance == null) {
                mInstance = new NetworkUtil();
            }
        }
    }
    return mInstance;
}

public boolean isOnline() {
    return mIsOnline;
}
person RaghavPai    schedule 14.02.2017