2016-01-11 4 views
0

Я пытаюсь проверить, если есть активное подключение к Интернету, и после поиска, я нашел рабочий код ответил на Левита:Проверьте подключение к Интернету Андроида в фоновом

https://stackoverflow.com/a/27312494/2920212

Это, кажется, работает штраф, за исключением иногда, это вызывает задержку, когда она выглядит так, как приложение заморожено. Я знаю его, потому что функция isOnline не выполняется в фоновом потоке. Я искал, но не смог правильно реализовать фоновый поток. Здесь Вы можете найти код:

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

Вот что я пробовал:

private void ChecOnline() { 
    class CheckURL extends AsyncTask<Void, Void, Boolean> { 


     @Override 
     protected Boolean doInBackground(Void... params) { 
      return isOnline(); 

     } 

     @Override 
     protected void onPostExecute(Boolean result) { 
      super.onPostExecute(result); 
      String myresult = Boolean.toString(result); 
      Toast.makeText(getApplicationContext(), myresult, Toast.LENGTH_LONG).show(); 
     } 
    } 
    CheckURL ucc = new CheckURL(); 
    ucc.execute(); 

Ничего не происходит, когда ChecOnline(); называется.

+0

Пытались ли вы с AsyncTask? – wnieves19

+0

Да, у меня есть, но я боюсь, что я, возможно, не реализовал его должным образом. –

+0

Хорошо, есть ли у вас какие-либо сообщения журнала? Вы можете попробовать использовать отладчик и поставить точки останова в классе AsyncTask и посмотреть, что он возвращает, Btw, не очень хорошая идея поместить AsyncTask в метод. – wnieves19

ответ

1

Попробуйте его с помощью AsyncTask

private class CheckOnlineStatus extends AsyncTask<Void, Integer, Boolean> { 


    @Override 
    protected Boolean doInBackground(Void... params) { 
     //This is a background thread, when it finishes executing will return the result from your function. 
     Boolean isOnline = isOnline(); 
     return isOnline; 
    } 

    protected void onPostExecute(Boolean result) { 
    //Here you will receive your result from doInBackground 
    //This is on the UI Thread 
    } 
} 

воззовете

new CheckOnlineStatus().execute(); 

выполнить свой код

+0

Спасибо, мой код действительно работает, я не уверен, почему это не было в первую очередь. –

+0

Удивительно, это самое важное – wnieves19